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

Execute bash script on multiple input files, ignoring other input variables

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

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

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

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

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

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

如何只循环文件输入而不包括文本输入?

这是我当前工作流程的描述:


获取指定电影

one.mov
two.mov

设置变量值(接受输入)

source_files

询问文本(忽略输入)

Enter a Number:

设置变量值(接受输入)

number

获取变量值(忽略输入)

source_files

获取变量值(接受输入)

number

运行Shell脚本(接受输入,通过"as arguments")

#/bin/bash

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

输出:

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

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

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

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

然后:

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