Saya telah menemukan perintah untuk menghapus file yang lebih lama dari 5 hari di folder
find /path/to/files* -mtime +5 -exec rm {} \;
Tetapi bagaimana saya juga melakukan ini untuk subdirektori dalam folder itu?
files
find
rm
timestamps
Teddy291
sumber
sumber
find /path/to -type d -empty -delete
rm test one
. (Yang akan menghapus file yang disebut "test" dan file yang disebut "one", tetapi bukan file yang disebut "test one"). Petunjuk: -delete atau -print0find
untuk menghindari masalah dengan karakter khusus, seperti yang disebutkan dalam baris pertama jawaban. Misalnya:find /path/to/files/ -exec somecommand '{}' \;
Jawaban:
Berhati-hatilah dengan nama file khusus (spasi, tanda kutip) saat mengirim pip ke rm.
Ada alternatif yang aman - opsi -delete :
Itu saja, tidak ada panggilan rm terpisah dan Anda tidak perlu khawatir tentang nama file.
Ganti
-delete
dengan-depth -print
untuk menguji perintah ini sebelum Anda menjalankannya (-delete
tersirat-depth
).sumber
-type f
untuk menghapus file saja (dan menyimpan sub direktori)find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
?find
argumen adalah filter yang menggunakan hasil dari filter sebelumnya sebagai input. Jadi pastikan Anda menambahkan -delete sebagai argumen terakhir. IE:find . -delete -mtime +5
akan menghapus SEMUA yang ada di jalur saat ini.Perhatikan bahwa perintah ini tidak akan berfungsi ketika menemukan terlalu banyak file. Ini akan menghasilkan kesalahan seperti:
Berarti batas panggilan sistem eksekutif pada panjang baris perintah terlampaui. Alih-alih menjalankan rm dengan cara itu, jauh lebih efisien untuk menggunakan xargs . Berikut ini contoh yang berfungsi:
Ini akan menghapus semua file (tipe f) yang dimodifikasi lebih dari 14 hari yang lalu di bawah / root / Maildir / secara rekursif dari sana dan lebih dalam (mindepth 1). Lihat manual temukan untuk opsi lainnya .
sumber
find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
Itu sama. Anda hanya perlu memberikan direktori induk daripada awalan file. Dalam contoh Anda, itu akan menjadi:
Ini akan menghapus semua file yang lebih lama dari 5 hari yang berada di bawah
/path/to
dan sub-direktori.Untuk menghapus sub-direktori kosong, lihat komentar @Costas di atas.
sumber
+
dalam kasus itu. - 2) lebih baik menulis-exec rm '{}' +
untuk menangkis kejahatan file dengan karakter khusus (spasi, baris baru, dll ...) atas nama mereka.sumber