web-dev-qa-db-ja.com

findからxargsにパイプされる、またはfind -exec +を使用するファイルの長さに制限はありますか

このサイトの質問[ Linuxで "test"という名前のディレクトリをすべて検索して削除 ]で、ベストアンサーは次の2つのコマンドの使用について説明しています。

find . -name test -type d -print0|xargs -0 rm -r --
find . -name test -type d -exec rm -r {} +

個別に何度も呼び出すのではなく、ディレクトリのlistを使用してrmを呼び出すためです。

評判が悪いのでコメントできないので、ここで新しい質問をします。

これらの手法を使用してrmに渡すことができるファイルの数に制限はありますか(現実的なシステムリソースの範囲は別として)?

シェルから、「rm *」のようなコマンドはシェルの最大コマンドライン長を超えることができますが、そのような制限は、find +のこの使用法、またはxargsへのパイプ経由に適用されますか?

4
simpleuser

要するに、いいえ。

長い答え:-Findは、一致するたびにexecで指定されたコマンドを実行するため、findで20個のファイルが見つかった場合、rmの20個の個別のインスタンスが実行されます。 --xargsは、シェルの最大コマンド長を決定し、_xargs --show-limits_ mtak@frisbee:~$ xargs --show-limits Your environment variables take up 4050 bytes POSIX upper limit on argument length (this system): 2091054 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2087004 Size of command buffer we are actually using: 131072の出力でわかるように、これらの制限内に引数を追加します。

5
mtak