2017-06-29 24 views
0

我必须运行一个命令,它使用bash脚本合并目录的每个子目录中的一些文件。 脚本查找所有.ps文件,将它们更改为.png文件,然后合并目录的.png文件。这必须为所有子目录完成。在带有文件名列表的脚本中运行bash命令

2_treeimages:包含目录列表。

对于2_treeimages中的每个目录 将.ps转换为png,然后合并。

以下程序将文件转换为.png,但在合并时出现错误,因为合并命令需要文件名列表,但这会给出单个字符串。

ps_dir=2_treeimages 
for dirname in "$ps_dir"/* 
do 
    inputlist="" 
    for filename in "$dirname"/* 
    do 
    if [ ${filename: -3} == ".ps" ] 
    then 
     filenoext="${filename%.*}" 
     result="$filenoext.png" 
     convert "$filename" "$result" 
     inputlist+="$result" 
    fi 
    done 


    combined_image="$dirname.png" 
    echo "$inputlist" 
    echo "$combined_image" 
    convert -append "$inputlist" "$combinedimage" 

done  

的inputlist显示为 '/2_treeimages/review12/review12sent0.png/2_treeimages/review12/review12sent1.png'

However it should be run as with 2 arguments 
'/2_treeimages/review12/review12sent0.png' 
'/2_treeimages/review12/review12sent1.png' 
+0

我猜你追加到'inputlist'时,就像缺少空间:'inputlist + =“$结果”' – Omar

+0

加入空间不作出它仍然认为差别它是一个论点。我想我应该使用一个数组,但不知道如何使用它 – AMisra

回答

0

我刚计算出来如何使用一个阵列,用于它现在它可以工作。 这里是我做过什么

ps_dir=2_treeimages 
    for dirname in "$ps_dir"/* 
    do 
     i=0 args=() 
     for filename in "$dirname"/* 
     do 

     if [ ${filename: -3} == ".ps" ] 
     then 
      filenoext="${filename%.*}" 
      result="$filenoext.png" 
      convert "$filename" "$result" 
      args[$i]="$result" 
      ((++i)) 

     fi 
     done 


     combined_image="$dirname.png" 
     convert "${args[@]}" -append "$combined_image" 

done