
これを行うには、シェル スクリプト、find、xargs でのループなど、いくつかの方法があるようです。これらのうちどれが最適で、どれが最も移植性が高いでしょうか?
答え1
find . -exec <command> {} \;
現在のディレクトリをツリーのルートとして使用する場合、または一般には:
find <directory> -exec <command> {} \;
答え2
ファイル名またはディレクトリ名にスペースが含まれている場合は、-print0
検索するには オプションを使用し、-0
オプションを使用します。xargs
find {dir} -print0 | xargs -0r {command}
find のオプション-print0
は、ファイル名NUL
を空白で区切られたリストではなく、 で区切られたリストとして出力します。一方、 の-0
オプションはxargs
、入力をNUL
空白ではなく で区切るように指示します。NUL
は Unix ファイル名で許可されていない文字の 1 つであるため、ファイル名の一部と間違われることはありません。
このオプションは、入力がない場合にエラーが発生しない-r
ようにするためのものです。xargs
答え3
移植性が問題になる場合は、シェル固有の方法は避けます (さまざまなシェルを使用している人はたくさんいますが、一般的に find と xargs は、誰も根本的に変更しようとしない、本当に基本的なツールです)。
find と xargs の基本引数を使用すると、より移植性の高いソリューションが得られます。
答え4
使用しているコマンドのバージョンに、再帰操作のフラグがまだ含まれていないことを確認してください。 :)