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 ...
そのため、フォーク呼び出しが少なくなり、プログラムの実行が速くなります。