の判断GNU findutils 変更ログ少なくとも10年間(そしてPOSIXの一部だったよりも長い間)GNUにいたに違いありません。
また、どこで使用できますかxargs
?選択肢を擁護するための妥当な理由はありますか? (もちろん、最大パラメータ数、並列性などを制御するパラメータなどの特殊パラメータが必要な場合は-exec … +
これを使用してください。)xargs
興味深い引用GNU findutil ドキュメントの一部:
[ で検索
-exec … +
]xargs
たとえば、xargs
古いコマンドの実行中に新しいコマンドラインを設定したり、複数のコマンドを並列に実行したりするなど、一部の用途よりも効率が悪い場合があります。しかし、このfind ... -exec ... +
構造は移植性が広いという利点があります。 GNU findutils は-exec ... +
バージョン 4.2.12 まで '' をサポートしていません。[2005年1月]; 1つの理由は、-print0
とにかくすでに ""アクションがあるからです。
答え1
+
-exec
POSIXにはバリアントが導入されました。PASC 説明 1003.2 #2102001年に発行され、第6号でPOSIX標準とマージされました(現在の標準で説明されているように)。find(1)
文書)。説明によると、System V Release 4のすべての派生製品はこれをサポートし、HP-UX(2001 - HP-UX 10はそれをサポートしていないことを知っています)もPOSIX 6または7互換システムもサポートしています。
GNU-ismは実際にfind -print0 | xargs -0
一連のコマンドです。-exec ... +
利用可能ですが-0
サポートされていない場合は、xargs
電子を使用する方が良いです。要件をサポートしても-0
使用しない理由はありません。-exec ... +
答え2
今、[]がどこでもサポートされていると仮定しても安全ですか
-exec ...
?
この-exec ... '{}' ';'
バリアントは、実行されるすべてのコマンドに対して正確な一致を提供し、POSIXではなくUnixシステムでもどこでも確実にサポートされます。
変形-exec ... '{}' +
、よくわかりません。実際、その定義は次のとおりです。POSIX-1したがって、現在のすべてのPOSIXyシステムはそれをサポートする必要があります。ただし、以前のすべてのUNIXシステム(まだ使用中)がそれをサポートしているかどうかはわかりません。
-exec ... '{}' +
[]が利用可能なときにxargsを使用することを擁護する必要がある理由はありますか?
いいえ本当に。 1つのコマンドで十分な場合、なぜ2つのコマンドを使用するのですか?
問題は、あなたが知っている唯一のツールがハンマーだけであれば、すべての問題は釘のように見えるということです。の利点は、リストで機能するコマンドを実行する前に、などのタスクを使用してリストを一致させることができることですxargs
。bash
sed
awk
(実際には、ファイル名とディレクトリ名に改行文字を含めないでください。BashおよびGNU find、sed、awk、およびxargsはどちらもNULL文字を区切り文字でサポートしているため、\0
問題なく可能なすべてのファイル名で機能できます。 )