から判断GNU findutils の変更ログ少なくとも 10 年間は GNU の find に含まれていたはずなので (POSIX の一部であった期間よりも長い)、今ではどこでもサポートされていると安全に想定できますか?
また、を使用できるxargs
場合に、代わりにを推奨する正当な理由はありますか? (明らかに、引数の最大数、並列処理などを制御するための特別なパラメータが必要な場合は を使用します)-exec … +
xargs
興味深い引用GNU findutilのドキュメントの一部:
[で検索
-exec … +
]は、 の使用法よりも効率が悪い場合がありますxargs
。たとえば、xargs
前のコマンドの実行中に新しいコマンド ラインを構築したり、並列に実行するコマンドの数を指定したりできます。ただし、この構造には幅広い移植性という利点があります。GNU findutils は、バージョン 4.2.12 までfind ... -exec ... +
' ' をサポートしていませんでした。-exec ... +
[2005年1月]; その理由の 1 つは、-print0
いずれにしても「 」アクションがすでに実行されていたことです。
答え1
+
の変種はPOSIX-exec
で導入されました。PASC 解釈 1003.2 #2102001年に、POSIX標準規格6号に統合されました(現在の標準規格に記載されているとおり)。find(1)
ドキュメンテーション)。解釈によれば、System V Release 4 のすべての派生製品がこれをサポートしています。HP-UX も同様です (2001 年現在 — HP-UX 10 ではサポートされていなかったことは知っています)。もちろん、POSIX 問題 6 または 7 に準拠したシステムもこれをサポートしています。
GNU 主義は、実際にはfind -print0 | xargs -0
コマンドのセットです。-exec ... +
が利用可能で、-0
のサポートがxargs
利用できない場合は、前者を使用する方が間違いなく良いでしょう。ただし、が必要なものをサポートしているので-0
あれば、 を使用しない理由はありません-exec ... +
。
答え2
[
-exec ...
] は現在どこでもサポートされていると考えて間違いないでしょうか?
実行されるコマンドごとに正確に 1 つの一致を提供するこの-exec ... '{}' ';'
バリアントは、POSIX 以外の UNIX システムでも、今後はどこでもサポートされることが確実です。
変種-exec ... '{}' +
についてはよく分かりません。確かに、それはPOSIX-1したがって、現在のすべての POSIXy システムで確実にサポートされています。ただし、古い UNIX システム (現在も使用されているもの) がすべてサポートしているかどうかはわかりません。
-exec ... '{}' +
[ ] を使用できる場合に、代わりに xargs を推奨する正当な理由はありますか?
いいえ、そうではありません。 1 つのコマンドで十分なのに、なぜ 2 つのコマンドを使用するのでしょうか?
問題は、知っているツールがハンマーだけであれば、すべての問題が釘のように見えることです。 の威力は、リストに作用するコマンドを実行する前に、、、などを使用しxargs
て一致リストを操作できるという事実から生まれます。bash
sed
awk
(ただし、実際には、ファイル名とディレクトリ名に改行文字が埋め込まれていないことが必要です。Bash と GNU find、sed、awk、xargs はすべて、\0
区切り文字としてヌル文字をサポートしているため、すべての可能なファイル名を問題なく操作できます。)