これを行う方法には、ループ、検索、およびシェルスクリプトのxargsを含むいくつかの方法があります。このうちどれが一番良く、どれが一番持ち運びがいいですか?
答え1
find . -exec <command> {} \;
現在のディレクトリがツリーのルートであるか、通常は次のようになります。
find <directory> -exec <command> {} \;
答え2
ファイルまたはディレクトリ名にスペースが含まれている場合は、-print0
検索オプションとターゲット-0
オプションを使用してください。xargs
find {dir} -print0 | xargs -0r {command}
findオプションは、-print0
ファイル名をNUL
スペースで区切られたリストではなく--separatedリストとして印刷し、スペースではなくスペースで-0
入力を中断するように指示しますxargs
。 Unixファイル名に許可されていない文字の1つNUL
なので、NUL
ファイル名の一部として誤解することは不可能です。
オプション-r
があるため、xargs
入力しなくてもエラーは発生しません。
答え3
移植性が問題であれば、シェル専用のアプローチを避けます。 (さまざまなシェルを使用している人が多いですが、通常、findとxargsは誰もがあまりにも根本的な方法で変更できない非常に基本的なツールです。)
find と xargs でデフォルトの引数を使用すると、より移植可能なソリューションが提供されます。
答え4
使用しているコマンドのバージョンに再帰操作のフラグがまだないことを確認してください。 :)