在多个输入文件上执行bash脚本,忽略其他输入变量

时间:2015-07-10 19:59:00

标签: bash automator

我正在使用Mac的Automator对放到Droplet上的文件执行bash脚本。输入从Automator操作收集,并作为参数传递给bash脚本。该脚本适用于单个输入文件,但我无法处理多个文件。

我的最终目标是接受几个丢弃的视频文件,提示输入一个数字,并从每个视频文件中提取该帧数(使用FFmpeg)。

我可以使用特殊变量$@循环输入,如下所示:

for f in "$@"; do
    # perform an action
done

但是,我的脚本还会提示用户输入我不希望包含在此循环中的文本输入。

我可以使用$1$2等单独访问每个输入文件。但我想使用循环而不是单独引用每个文件。此外,输入文件的数量是不可预测的,我不知道如何区分输入文件和输入文本。

如何在不包含文本输入的情况下仅循环文件输入?

以下是我当前工作流程的说明:

获取指定影片

  

one.mov
  two.mov

设置变量值(接受输入)

  

SOURCE_FILES

询问文字(忽略输入)

  

输入一个数字:

设置变量值(接受输入)

  

获取变量值(忽略输入)

  

SOURCE_FILES

获取变量值(接受输入)

  

运行Shell脚本(接受输入,传递"作为参数")

#/bin/bash

for f in "$@"; do
    echo $f
done

输出:

  

/folder/one.mov
  /folder/two.mov
  8

我希望将一个变量设置为多个输入(因此我可以遍历它),另一个变量设置为数字,但它似乎不会那样工作。

如何在不引用文本输入的情况下遍历每个输入文件?

1 个答案:

答案 0 :(得分:2)

只需更改args的顺序:首先获取变量number的值, 然后得到变量source_files的值, 这样number将成为第一个参数,

然后:

echo number: $1
for f in "${@:2}"; do
    echo file: $f
done