回答:
-delete
一致するファイルごとに外部プロセスを生成する必要がないため、パフォーマンスが向上します。
のすべてのバージョンに存在するわけではない-exec rm {} \;
ため、頻繁に推奨される可能性があります。今すぐ確認することはできませんが、それなしで使用したことは間違いありません。-delete
find
find
どちらの方法も「安全」でなければなりません。
EDIT @doitmywayからのコメントあたり:あなたが名前に一致させると、その後(一致し、その後、削除)の周りに他の方法ではなく、削除します。そうしないと、一致するかどうかにかかわらず、すべてのファイルが削除されます。すなわち、これをしないでくださいfind / -delete -name .DS_Store
。
一致したファイルごとに外部プロセスを生成するオーバーヘッドを回避する一般的な方法は次のとおりです。
find / -name .DS_Store -print0 | xargs -0 rm
(しかし、ここにも移植性の問題があることに注意してください:findのすべてのバージョンが持っているわけではありません-print0
!)
find
は-exec rm {} +
、単一のrm
コマンドで一致するすべてのファイルを削除するために使用できます。
.DS_Store
には特殊文字がまったく含まれていないため、引用符は不要であり、この場合は何も変わりません。
;
|
>
<
xargs
は、コマンドの複数の呼び出しに分割することにより、サイズが制限された引数リストの問題を透過的に処理します。
Macbookなどのマシンでは、2つのコマンドのパフォーマンスに大きな違いはありません。ただし、-execバージョンを見ると、微妙な違いがわかります。
sudo find / -iname ".file-to-delete" -exec rm {} \;
これは、「。file-to-delete」という名前のファイルがすべて見つかることを意味します。ただし、この検索では、不要な誤検出が返される場合があります。sudoで何かをするときは、もう少し注意が必要です。-exec rm {}を使用する利点は、次のように引数をrmに渡すことができることです。
sudo find / -iname "*~" -exec rm -i {} \;
この例では、emacsが作成するバックアップファイルを削除します。ただし、そのチルダは、私が知らない重要なファイルに含まれている可能性があります。さらに、削除を確認します。そこで、rmコマンドにオプション '-i'を追加しました。これにより、インタラクティブな削除が可能になります。
また、ディレクトリとファイルを削除するためにrmの使用法を改良できます。
find /usr/local/share/ -iname "useless" -exec rm -r {} \;
簡単に言うと、-execを使用すると、見つかったアイテムを削除する実際のコマンドをもう少し制御できます。利点は、1つのツールを使用してファイルを検索し、別のツールを使用してそれらを削除することです。また、findユーティリティのすべてのバージョンに-deleteオプションがあるわけではありません。そのため、各ツールを適切な仕事に使用することをお勧めします。これがUNIXの哲学です。1つのツール、1つのジョブ、それらを一緒に使用して必要なことを行います。
-ok rm {} \;
代わりにも参照してください -exec rm {} \;
。
-delete
前にスイッチを使用することも読んだ-name
ので、注意する必要があると思います。