Saya melakukan tugas ini secara teratur, dan saya menggunakan varian berikut ini. Ini adalah pipa yang menggabungkan berbagai alat sederhana: Temukan semua file, tambahkan waktu modifikasi file, sortir, hapus waktu modifikasi file, tampilkan semua baris kecuali 500 yang pertama, dan hapus:
find foo/ -type f | perl -wple 'printf "%12u ", (stat)[9]' | \
sort -r | cut -c14- | tail -n +501 | \
while read file; do rm -f -- "$file"; done
Beberapa komentar:
Jika Anda menggunakan "bash", Anda harus menggunakan "read -r file", bukan hanya "read file".
Menggunakan "perl" untuk menghapus file lebih cepat (dan juga menangani karakter "aneh" dalam nama file lebih baik daripada while-loop, kecuali jika Anda menggunakan "read -r file"):
... | tail -n +501 | perl -wnle 'unlink() or warn "$_: unlink failed: $!\n"'
Beberapa versi "tail" tidak mendukung opsi "-n", jadi Anda harus menggunakan "tail +501". Cara portabel untuk melewati 500 baris pertama adalah
... | perl -wnle 'print if $. > 500' | ...
Ini tidak akan berfungsi jika nama file Anda mengandung baris baru.
Itu tidak memerlukan GNU find.
Menggabungkan di atas memberi Anda:
find foo/ -type f | perl -wple 'printf "%12u ", (stat)[9]' | \
sort -r | cut -c14- | perl -wnle 'print if $. > 500' | \
perl -wnle 'unlink() or warn "$_: unlink failed: $!\n"'
rm -f
.Ini adalah bagaimana saya akan melakukannya dengan Python 3. yang juga harus berfungsi untuk OS lain. Setelah menguji ini, pastikan untuk membatalkan komentar pada baris yang benar-benar menghapus file.
sumber
Saya tidak tahu tentang "500 terbaru", tetapi dengan menemukan Anda dapat menghapus hal-hal yang berumur lebih dari X menit / hari. Contoh untuk file dan lebih dari 2 hari:
Tes pertama dengan:
Pikirkan garis miring terbalik dan ruang sebelum "\;". Lihat halaman manual find untuk info lebih lanjut.
sumber
jika Anda bisa melakukan dengan menjaga file x hari / jam bukan nomor x terbaru, Anda bisa melakukannya hanya dengan
tmpwatch --ctime 7d
sumber
Saya pikir opsi
-mtime
dan perintah berguna untuk Anda. Anda dapat melihat untuk info lebih lanjut.-newer
find
man find
sumber
mengapa tidak menggunakan kode sederhana ini:
sumber