如何将一个目录中的多个文件引用到一个命令

Hel*_*ene 2 shell-script files

我有一个命令需要获取多个输入文件,这些文件最初来自一个目录并且具有特定的文件名模式。例如:

在目录中

/home/mydir/
Run Code Online (Sandbox Code Playgroud)

我有文件:

A.dat
B.dat
C.dat
readme.doc
Run Code Online (Sandbox Code Playgroud)

我想了解如何将所有以“.dat”结尾的文件传递给此命令,该命令应如下所示:

command A.dat B.dat C.dat > /home/outputdir/output.dat
Run Code Online (Sandbox Code Playgroud)

我可以在 python 中做到这一点,例如通过将文件名存储在列表中,但是我应该如何在 shell 中做到这一点?多谢。

Jef*_*ler 5

标准 UNIX shell 会执行称为globbing 的操作;这使用特殊字符来表示,例如,一个字符 ( ?) 或任意数量的字符 ( *)。要使用您的示例,您可以运行(其中首字母$代表您的命令提示符,而不是您输入的内容):

$ command /home/mydir/*.dat > /home/outputdir/output.dat
Run Code Online (Sandbox Code Playgroud)

您的 shell 会将其扩展为:

$ command /home/mydir/A.dat /home/mydir/B.dat /home/mydir/C.dat > /home/outputdir/output.dat
Run Code Online (Sandbox Code Playgroud)

在实际调用命令之前。上面*说“获取 /home/mydir 中以“.dat”结尾的所有文件名。

对于命令的某些变体,给定相同的输入文件:

# all of the sample input files have a single letter before the ".dat"
$ command /home/mydir/?.dat > /home/outputdir/output.dat

# the square brackets say "any (one) of these characters"
$ command /home/mydir/[ABC].dat > /home/outputdir/output.dat
Run Code Online (Sandbox Code Playgroud)