Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将目录中的所有文件名作为参数传递给Bash中的命令?_Linux_Bash_Shell_Unix_Command Line - Fatal编程技术网

Linux 如何将目录中的所有文件名作为参数传递给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.

我正在使用Subliminal(一种为任何给定媒体文件查找字幕的工具)为一系列电视连续剧集获取字幕,而现在,我正在为每一集手动操作。这是一个乏味的过程。相反,我希望使用Bash实现自动化

我不是Bash忍者,先试试这个:

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[@]}”