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 中做到这一点?多谢。
标准 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)