find … -exec rm {} \; rm を実行します 各ファイルのコマンド。新しいプロセスを開始するのは非常に高速ですが、ファイルを削除するだけの場合よりもはるかに時間がかかります.
find … -exec rm {} + rm を呼び出します バッチで、これははるかに高速です:rm を実行するコストを支払います バッチごとに 1 回、各バッチで多数の削除が実行されます。
rm を呼び出さない方が早い まったく。 find Linux のコマンドにはアクション -delete があります 一致するファイルを削除します。
find ./cache -type f -mtime +0.5 -delete
ただし、find … -exec rm {} \; のような速度でファイルを生成している場合 ついていけません。おそらく設定に問題があります。 cache の場合 数百万のファイルが含まれているため、アクセスを高速化するためにサブディレクトリに分割する必要があります。
xargs を使ってみてください :
find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
@pradeepchhetri の説明を更新
find を使用する場合 -exec で 、 find であるすべてのファイル found は rm を呼び出します 一度。したがって、大量のファイル、つまり 10000 ファイルを見つけた場合は、rm を呼び出します。 10000回。
xargs find の出力を扱います rm へのコマンド引数として 、そのため、xargs は rm と同じ数の引数を提供します 一度に処理できます。つまり、rm -f file1 file2 ... そのため、フォーク呼び出しが少なくなり、プログラムの実行が速くなります。