我想执行一个命令,该命令采用多个参数,这些参数驻留在同一文件名下的不同目录中,例如
mycommand dir-001/myfile dir-002/myfile dir-003/myfile … dir-048/myfile
我正在寻找一些 shell 命令,它可以将所有文件放入编号从 1 到 48 或任何数字作为命令参数的子目录中。
答案1
您可以使用标准文件名通配符,例如所有 3 位数字(按顺序):
$ mycommand dir-[0-9][0-9][0-9]/myfile
对于基本的通配符,您需要一种用于一位数字的模式,一种用于两位数字的模式,等等。
$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile
Zsh(但不包括其他 shell)也支持mycommand dir-<->/myfile
, 或 例如mycommand dir-<3-42>/myfile
编号为 3 到 42 的目录。
或者,如果您更喜欢大括号扩展(并且您的 shell 支持它):
$ mycommand dir-{1..3}/myfile
如果您的目录名称包含前导零,请将它们放在大括号中,例如dir-{001..048}/myfile
.
通过大括号扩展,您也可以这样做(在 ksh93 和 zsh 中,但不在 bash 中)
$ mycommand dir-{1..$n}/myfile
其中$n
扩展为某个整数。
答案2
find . -type f -name myfile | xargs command