Elimina i file più vecchi di 500 giorni


10

Ho una directory con file dall'anno 2010 .. Voglio eliminare tutti i file più vecchi di 500 giorni e ho provato questo:

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

Ma ottengo questo:

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

Come so, questo significa che ci sono troppi file e findnon sono in grado di gestirli. Ma anche se ho messo più di +20003 anni, sto ancora ottenendo questo.

Cosa mi manca qui?


Risposte:


18

Manca che findnon è necessario un elenco di file come input. Il problema è che il glob si /var/log/arc/*espande in troppi file. Tuttavia, findrientrerà nelle sottodirectory per impostazione predefinita, quindi non è necessario utilizzare il glob a tutti:

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

-deleteè un predicato non standard. Se l' findimplementazione non lo supporta, è possibile utilizzare:

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

anziché.


Grazie, ma ora ho questo: find: invalid predicate -delete'`
Garg

1
@Garg prima, scusa, ho appena copiato il tuo comando e non avevo notato che la sintassi è sbagliata. Il -deletenon prende {}. Vedi aggiornamento Tuttavia, il tuo messaggio di errore sembra suggerire che la tua versione di findnon supporta -delete. Se non stai usando GNU find(che nella maggior parte dei casi non lo farai a meno che tu non stia usando Linux), devi -exec -rm {} \;invece usare .
terdon

Grazie. -exec rm {} \;fare il trucco.
Garg,

1
@hobbs Non vedo perché no, -execè definito da POSIX .
terdon

@dondon mio errore.
Hobbs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.