Hapus file yang lebih lama dari 500 hari

10

Saya memiliki direktori dengan file dari tahun 2010 tahun .. Saya ingin menghapus semua file yang lebih lama dari 500 hari dan saya mencoba ini:

find /var/log/arc/* -type f -mtime +500 -delete {}\;      

Tapi saya mengerti:

-bash: /usr/bin/find: Argument list too long

Seperti yang saya tahu ini berarti ada terlalu banyak file dan findtidak dapat menanganinya. Tetapi bahkan jika saya menempatkan +20003+ tahun saya masih mendapatkan ini.

Apa yang saya lewatkan di sini?

Garg
sumber
1
unix.stackexchange.com/a/239268/116858 (lihat juga komentar)
Kusalananda

Jawaban:

18

Anda hilang yang findtidak memerlukan daftar file sebagai input. Masalahnya adalah bahwa glob /var/log/arc/*memperluas terlalu banyak file. Namun, findakan muncul kembali ke subdirektori secara default, jadi tidak perlu menggunakan glob sama sekali:

find /var/log/arc/ -type f -mtime +500 -delete

-deleteadalah predikat tidak standar. Jika findimplementasi Anda tidak mendukungnya, Anda dapat menggunakan:

find /var/log/arc/ -type f -mtime +500 -exec rm -f {} +

sebagai gantinya.

terdon
sumber
Terima kasih tetapi sekarang dapat ini: find: invalid predicate -hapus'`
Garg
1
@Garg pertama, maaf, saya baru saja menyalin perintah Anda dan tidak melihat sintaks Anda salah. Tidak -deleteterima {}. Lihat pembaruan. Namun, pesan kesalahan Anda tampaknya menyarankan bahwa versi findAnda tidak mendukung -delete. Jika Anda tidak menggunakan GNU find(yang dalam banyak kasus Anda tidak akan melakukannya kecuali Anda menggunakan Linux), Anda harus menggunakannya -exec -rm {} \;.
terdon
Terima kasih. -exec rm {} \;lakukan triknya.
Garg
1
@hobbs saya tidak melihat mengapa tidak, -execyang didefinisikan oleh POSIX .
terdon
@ kesalahan kesalahan saya.
hobbs