对多个目录中的同名文件运行命令

对多个目录中的同名文件运行命令

我想执行一个命令,该命令采用多个参数,这些参数驻留在同一文件名下的不同目录中,例如

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

相关内容