Eliminazione di file per età


16

Esiste un comando per eliminare tutti i file in una directory che non sono stati modificati in N giorni? Devo ripulire alcuni vecchi registri.

Risposte:


24

Questo eliminerà tutti i file più vecchi di 5 giorni, puoi inserirne uno -name '*log'anche per essere più precisi e potresti voler specificare anche un maxdepthnel comando find.

find /some/dir -type f -mtime +5 -delete


5
Sebbene i saggi amministratori di sistema eseguano un ciclo a secco -lsinvece di -deleteassicurarsi che ciò non elimini tutto ciò che desideravano. Sì, parlando per esperienza qui.
Shadur,

2
Parlando per esperienza, controllano anche il loro percorso. o no, poiché una volta ho fatto la / some/dir/versione. :(
Hennes,

3

Con zshe (.m+n) qualificatori glob : .seleziona solo i file regolari, m+nseleziona i file modificati più di n giorni fa;
ad esempio, elencare i file nella directory corrente che sono stati modificati più di 9 giorni fa:

print -rl -- *(.m+9)

aggiungi Dper includere file dot:

print -rl -- *(D.m+9)

o se si desidera ricorrere (ed elencare ad esempio solo i file che terminano con .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

sostituirlo print -rlcon rmse si è soddisfatti del risultato; anche se potresti dover usarezargs se hai molti file (per evitare un elenco di argomenti troppo lungo ):

autoload zargs
zargs ./**/*(.m+9) -- rm
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.