Hapus semua file yang dibuat sebelum tanggal tertentu


26

Saya memiliki direktori yang berisi banyak file (seperti log untuk setiap hari sepanjang tahun). Saya ingin menghapus semua file yang dibuat sebelum katakanlah 22/11. Bagaimana saya bisa mencapainya? Haruskah saya gunakan findmaka exec -rm? Saya menggunakan ksh.


1
Peringatan yang umum adalah bahwa sistem file Unix umumnya tidak berisi catatan kapan file itu dibuat - hanya saat inode dan konten terakhir diubah tersedia.
Toby Speight

Jawaban:


35

Menggunakan findmasih merupakan cara yang disukai untuk menghapus file. Lihat http://mywiki.wooledge.org/UsingFind untuk lebih lanjut.

Salah satu cara untuk melakukan ini adalah membuat file dengan cap waktu di dalamnya. misalnya

touch -t 201311220000 /tmp/timestamp

Sekarang hapus file-file GNU find(dengan asumsi dalam direktori saat ini) yang cocok dengan cap waktu misalnya:

find . -type f ! -newer /tmp/timestamp -delete  

atau bukan GNU find

find . -type f ! -newer /tmp/timestamp -exec rm {} \;

2
Bagaimana dengan ini ? Apakah itu bekerja ? temukan -type f -mtime +5 -exec rm -f {} \;
user1058398

1
@ user1058398 Itu akan menghapus file yang lebih lama dari 5 hari dari sekarang.
Valentin Bajrami

Apakah itu juga menghapus folder bersama dengan file? @ val0x00ff
alper

1
@ Avatar no karena type -fmembatasi aksi hanya pada file.
Valentin Bajrami

22

Dengan GNU atau BSD finds:

find . ! -newermt 2013-11-22 ! -type d -delete

Perhatikan bahwa ini memeriksa waktu modifikasi terakhir dari file. Pada beberapa BSD, Anda dapat menggunakan -newerBtdi tempat -newermtuntuk memeriksa inode file itu lahir waktu jika tersedia sebagai gantinya.


1
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

contoh:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

Dalam hal ini akan menghapus semua file yang dimulai dengan "ORA_XEO" dengan lebih dari 15 hari.


Meskipun lebih baik melihatnya dengan rm -rf, perintah pertama akan menghapus semua yang ada di direktori yang lebih tua dari 15 hari itu. (Juga, mengapa tanda kurung ada di sekitar -name?)
ilkkachu

Anda benar, kami tidak perlu memasukkan "(" ")".
calafate tanggal

tetapi jika kita ingin menambahkan suatu kondisi, itu bisa bermanfaat. misalnya jika kita ingin menghapus semua file yang diakhiri dengan ".jar" atau ".cp", dan mulai dengan "ex". example.jar- itu akan dihapus example.cp- itu akan dihapus example.tar- itu tidak akan dihapus
calafate

dalam hal ini kita dapat menggunakan:find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
calafate

Itu akan menghapus beberapa file dari <jumlah hari> daripada semua file yang lebih lama dari <jumlah hari> kecuali Anda menjalankannya tepat di tengah malam dan selesai dalam satu detik. Dengan GNU findAnda harus menggunakan -daystartpengubah untuk memaksa -mtimenilai ke tengah malam.
roaima
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.