1MBより大きいフォルダ内のすべてのファイルを削除したいとしましょう。
$ find . -size +1M | xargs -0 rm
名前にスペースが含まれるファイルは削除されません。だから送信されるすべてのパラメータを引用したいと思いますrm
。find
与えられた場合にSome report.docx
渡されるべきです。"Some report.docx"
rm
どうすればいいですか?
答え1
同様の要件がありましたが、最終的にスイッチを使用してプレースホルダを-I
設定し、それを参照することができました。
find . -size +1M | xargs -I {} rm "{}"
答え2
すでに非標準を使用しているため、1M
実装でもfind
これをサポートする可能性が高いです-delete
。したがって、以下を使用してください。
find . -type f -size +1M -delete
サポートされている場合、これは断然最も安全で効果的です。
xargs
and をrm
引き続き使用するには、次のコマンドをfind
追加します。-print0
find . -type f -size +1M -print0 | xargs -r0 rm -f --
(-print0
そして-0
非標準ですが一般的です。(何も見つからない場合は実行しないでください-r
)はあまり一般的ではありませんが、サポートしていない場合は引数なしで呼び出されるかのように無視できます。)rm
find
xargs
rm
-f
標準構文は次のとおりです。
find . -type f -size +1048576c -exec rm -f -- {} +
別の方法:
find . -type f -size +1M -execdir rm -f -- {} +
-exec
(これは/より安全で、xargs -0
非常に深いディレクトリツリーで動作できます(フルファイルパスが減少するよりも大きくなりますPATH_MAX
)rm
。
~からman find
GNUシステムでは:
-print0
Trueの場合、標準出力にフルファイル名を印刷し、その後にヌル文字(使用されている改行文字の代わりに
find
。このオプションは-0
オプションに対応しますxargs
。
答え3
オプションは、パイプの出力がヌルターミネータとして解釈されることを-0
意味します。xargs
この場合を使用してパイプへの入力も生成する必要がありますfind ... -print0
。
答え4
実際に質問に対する既存のコメントを書き直し、答えの下に表示されるようにしました。私の場合は、locate
特定の文字列を含むファイル名を見つけるために使用しました。
Ivan Zaharyachevは次のように書いています。xargs -d$'\n'
区切り文字を改行(空白ではない)のみに制限するために使用されます。見積もりなどは具体的には扱いません。--GNUシステムを確認しました.) --回答を提供
stackoverflow.com/a/33528111/94687
たとえば、Ivanの提案を使用すると、
$ locate -i example_string | xargs -d$'\n' md5sum