
同じファイル名の異なるディレクトリにある複数の引数を取るコマンドを実行したい。例:
mycommand dir-001/myfile dir-002/myfile dir-003/myfile … dir-048/myfile
1 から 48 までの番号が付けられたサブディレクトリ内のすべてのファイル、またはコマンド引数として任意の番号を配置できるシェル コマンドを探しています。
答え1
標準的なファイル名グロビングを使用できます。たとえば、すべての 3 桁の数字 (順番に) の場合:
$ mycommand dir-[0-9][0-9][0-9]/myfile
基本的なグロビングでは、1 桁の数字に 1 つのパターン、2 桁の数字に 1 つのパターンなどが必要になります。
$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile
Zsh (他のシェルは除く) はmycommand dir-<->/myfile
、 または、たとえばmycommand dir-<3-42>/myfile
3 から 42 までの番号のディレクトリもサポートします。
または、中括弧の展開を好む場合(そしてシェルがそれをサポートしている場合):
$ 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