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 find
tidak dapat menanganinya. Tetapi bahkan jika saya menempatkan +2000
3+ tahun saya masih mendapatkan ini.
Apa yang saya lewatkan di sini?
Jawaban:
Anda hilang yang
find
tidak memerlukan daftar file sebagai input. Masalahnya adalah bahwa glob/var/log/arc/*
memperluas terlalu banyak file. Namun,find
akan muncul kembali ke subdirektori secara default, jadi tidak perlu menggunakan glob sama sekali:-delete
adalah predikat tidak standar. Jikafind
implementasi Anda tidak mendukungnya, Anda dapat menggunakan:sebagai gantinya.
sumber
find: invalid predicate
-hapus'`-delete
terima{}
. Lihat pembaruan. Namun, pesan kesalahan Anda tampaknya menyarankan bahwa versifind
Anda tidak mendukung-delete
. Jika Anda tidak menggunakan GNUfind
(yang dalam banyak kasus Anda tidak akan melakukannya kecuali Anda menggunakan Linux), Anda harus menggunakannya-exec -rm {} \;
.-exec rm {} \;
lakukan triknya.-exec
yang didefinisikan oleh POSIX .