对多个输入文件执行 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
我正在使用 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