複数のディレクトリから同じ名前のファイルに対してコマンドを実行する

複数のディレクトリから同じ名前のファイルに対してコマンドを実行する

同じファイル名の異なるディレクトリにある複数の引数を取るコマンドを実行したい。例:

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>/myfile3 から 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

関連情報