Saya memiliki folder cache dengan minimal 15000 file.
Saya mencoba ini:
find cache* -mtime +30 -exec rm {} \;
Tapi ini membuat server saya memuat terbang ke langit!
Apakah ada solusi yang lebih cepat / lebih baik ?
Atau bisakah saya membatasi kecepatan atau iterasi dari perintah ini?
linux
ubuntu
command-line
find
Kristian
sumber
sumber
cache*
mengembang ke banyak file, Anda mungkin ingin mencoba sesuatu seperti itufind . -name 'cache*' -mtime +30 -exec rm {} \;
.Jawaban:
Saya suka menggunakan
tmpwatch
untuk hal-hal ini, ini adalah terakhir kali file dimodifikasi. Ini sederhana dan berfungsi dengan baik dalam banyak kasus:Untuk Ubuntu, periksa
tmpreaper
saja.Jika Anda ingin memeriksa kapan terakhir kali file diakses daripada Anda menggunakan yang berikut ini:
Anda tidak dapat menggunakan tmpwatch -a pada sistem file yang dipasang dengan noatime. Anda masih bisa menggunakan -m
sumber
Ubuntu 10.04.2 LTS
dan perintah itu tidak ada ..tmpreaper
gantinya.Anda dapat menghindari pemunculan proses baru untuk setiap file dengan menggunakan
sumber
Coba jalankan di atas dengan baik:
Dengan cara itu beban besar hanya akan muncul jika tidak ada lagi yang perlu dijalankan, jika tidak, proses lain akan didahulukan (jika kebaikannya lebih rendah dari 19 yaitu maksimum).
Perhatikan bahwa argumen ke opsi -n ditambahkan ke kebaikan standar yang bervariasi antara -20 dan 19. Saya menggunakan 39 sehingga akan sangat bagus terlepas dari apa kebaikan asli yang ada.
sumber
Seperti dikomentari oleh chiborg, pemuatan ini karena memulai rm untuk setiap file yang ditemukan. Saya memperhatikan jawaban di mana
tmpwatch
disarankan sebagai alternatif, yang saya yakin berfungsi dengan baik. Namun, itu tidak perlu.Find dapat menjalankan perintah yang diberikan kepada exec sekali, jika Anda memintanya untuk mengakumulasikan file yang ditemukan ke dalam daftar argumen seperti:
Ini kadang-kadang gagal berfungsi karena daftar argumen mungkin tumbuh lebih besar (dalam byte) daripada maksimum yang diizinkan oleh shell (getconf ARG_MAX). Ini dapat diselesaikan dengan xargs dengan opsi -L.
pertimbangkan contoh ini:
Jadi tidak perlu menginstal perangkat lunak tambahan, yang Anda butuhkan adalah di gnu-findutils:
sumber
\+
; polos+
sudah cukup bagus. (2) Ini tidak akan "gagal berfungsi karena daftar argumen mungkin bertambah besar ...".find … -exec … {} +
akan melakukan hal yang sama yangxargs
akan dilakukan; itu akan menjalankan perintah sebanyak yang diperlukan. Misalnya (seperti pada contoh Anda), jika Anda memiliki antara 15001 dan 20.000 file,find
akan menjalankan-exec
program (rm
) empat kali.