これら2つのコマンドの違いを理解しようとしています。
find / -name .DS_Store -delete
そして
find / -name ".DS_Store" -exec rm {} \;
-exec ... {}
この方法が好ましいことがわかりました。なぜ?どちらがより安全で/速く/より良いですか?私は両方とも書いた。MacBookすべてがうまくいくようです。
ベストアンサー1
-delete
一致するファイルごとに外部プロセスを作成する必要がないため、パフォーマンスは良いですが、確実にするこのオプションを呼び出す後ろにフィルタ基準(たとえば-name
、-cmin
など-type
)。それ以外の場合は、指定されたファイルツリー全体が削除されます。実際にfind
マンページを引用すると、次のようになります。
GNU findは、結果がわかるまで、与えられた式を左から右に評価し、優先順位ルール(演算子のセクションを参照)に従って、与えられた各開始点にルートを持つディレクトリツリーを検索します。
例えば、
find . -name .DS_Store -type f -delete
大丈夫でしょう。
すべてのバージョンに存在するわけではない-exec rm {} +
ので、推奨事項をよく見ることができます。今は確認できませんが、なしで使ったことは確かです。-delete
find
find
どちらの方法も「安全」でなければなりません。
一致するファイルごとに外部プロセスを作成するオーバーヘッドを防ぐ一般的な方法は次のとおりです。
find / -name .DS_Store -print0 | xargs -0 rm
(しかし、ここでも移植性の問題があることに注意してください。findのすべてのバージョンに移植性があるわけではありません-print0
!)