在带有文件名列表的脚本中运行bash命令

时间:2017-06-29 22:28:18

标签: bash arguments

我必须运行一个命令,使用bash脚本合并目录的每个子目录中的一些文件。 该脚本查找所有.ps文件,将它们更改为.png文件,然后合并目录的.png文件。必须为所有子目录执行此操作。

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     

输入列表显示为 ' /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' 

1 个答案:

答案 0 :(得分: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