Linux 如何将目录中的所有文件名作为参数传递给Bash中的命令?
我正在使用Subliminal(一种为任何给定媒体文件查找字幕的工具)为一系列电视连续剧集获取字幕,而现在,我正在为每一集手动操作。这是一个乏味的过程。相反,我希望使用Bash实现自动化 我不是Bash忍者,先试试这个:Linux 如何将目录中的所有文件名作为参数传递给Bash中的命令?,linux,bash,shell,unix,command-line,Linux,Bash,Shell,Unix,Command Line,我正在使用Subliminal(一种为任何给定媒体文件查找字幕的工具)为一系列电视连续剧集获取字幕,而现在,我正在为每一集手动操作。这是一个乏味的过程。相反,我希望使用Bash实现自动化 我不是Bash忍者,先试试这个: for i in /dir/*.avi; do subliminal -l en -- "$i"; done; 但很明显,这是行不通的 subliminal还接受多个文件名作为参数,因此以下功能也适用: subliminal -l en -- file1.avi file2.
for i in /dir/*.avi; do subliminal -l en -- "$i"; done;
但很明显,这是行不通的
subliminal还接受多个文件名作为参数,因此以下功能也适用:
subliminal -l en -- file1.avi file2.avi ... filen.avi
但是手动键入并用制表符填写每个文件名需要做大量的工作。我想有更简单的方法来完成这个?也许使用xargs,但我不确定
您的想法是什么?通配符在命令运行之前展开
subliminal -l en -- file*.avi
太棒了,这正是我想要的。但为了将来的参考,我如何将整个文件名列表(在任何地方都没有特定的模式)作为多个参数传递给一个命令?您可以对其进行cat或回显到xargs。您永远不会为此使用ls<代码>潜意识…*。avi
cat listoffiles.txt|xargs阈下…
xargs阈下。。。NUL定界更安全:printf“%s\0”*.avi>文件列表;cat文件列表| xargs-0 subliminal-l en--
@JosephJohn你所说的文件名“整个列表”是什么意思?如果要传入目录中的所有文件,而不考虑其名称,则仍然使用全局模式:*
单独匹配目录中的所有文件。要在数组中存储名称:文件=(/dir/*.avi)
--然后可以展开它们:阈下-l en--“${files[@]}”