find … -exec rm {} \;
mengeksekusi rm
perintah untuk setiap file. Meskipun memulai proses baru cukup cepat, ini masih jauh lebih lambat daripada sekadar menghapus file.
find … -exec rm {} +
akan memanggil rm
dalam batch, yang jauh lebih cepat:Anda membayar biaya menjalankan rm
sekali per batch, dan setiap batch melakukan banyak penghapusan.
Yang lebih cepat adalah tidak memanggil rm
sama sekali. find
perintah di Linux memiliki aksi -delete
untuk menghapus file yang cocok.
find ./cache -type f -mtime +0.5 -delete
Namun, jika Anda membuat file dengan kecepatan find … -exec rm {} \;
tidak dapat mengikuti, mungkin ada yang salah dengan penyiapan Anda. Jika cache
berisi jutaan file, Anda harus membaginya menjadi subdirektori untuk akses yang lebih cepat.
Coba gunakan xargs
:
find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
Perbarui penjelasan untuk @pradeepchhetri
Jika Anda menggunakan find
dengan -exec
, setiap file yang find
ditemukan akan memanggil rm
satu kali. Jadi jika Anda menemukan banyak file, yaitu 10.000 file, Anda memanggil rm
10.000 kali.
xargs
akan memperlakukan ouput dari find
sebagai argumen perintah ke rm
, sehingga xargs akan memberikan argumen sebanyak rm
dapat menangani sekaligus, yaitu rm -f file1 file2 ...
Jadi itu mengurangi fork call, membuat program berjalan lebih cepat.