Ho una directory che contiene un numero elevato di file (come i registri per ogni giorno dell'anno). Vorrei rimuovere tutti i file creati prima del 22/11. Come posso raggiungerlo? Devo usare find
quindi exec -rm
? Sto usando ksh.
Ho una directory che contiene un numero elevato di file (come i registri per ogni giorno dell'anno). Vorrei rimuovere tutti i file creati prima del 22/11. Come posso raggiungerlo? Devo usare find
quindi exec -rm
? Sto usando ksh.
Risposte:
L'utilizzo find
è ancora il modo preferito di eliminare i file. Vedi http://mywiki.wooledge.org/UsingFind per ulteriori informazioni.
Un modo per farlo è quello di creare un file con il timestamp al suo interno. per esempio
touch -t 201311220000 /tmp/timestamp
Ora cancella i file GNU find
(assumendo nella directory corrente) che corrispondono al timestamp es:
find . -type f ! -newer /tmp/timestamp -delete
o non GNU find
find . -type f ! -newer /tmp/timestamp -exec rm {} \;
type -f
limita l'azione ai soli file.
Con GNU o alcuni BSD find
:
find . ! -newermt 2013-11-22 ! -type d -delete
Si noti che controlla l'ora dell'ultima modifica dei file. Su alcuni BSD, è possibile utilizzare -newerBt
al posto di -newermt
per verificare l' ora di nascita dell'inode del file, se disponibile.
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;
esempio:
find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;
In questo caso rimuoverà tutti i file che iniziano con "ORA_XEO" con più di 15 giorni.
rm -rf
, il primo comando rimuoverà tutto ciò che è contenuto in tutte le directory più vecchie di quei 15 giorni. (Inoltre, perché tra parentesi -name
?)
example.jar
- verrà rimosso example.cp
- verrà rimosso example.tar
- non verrà rimosso
find /path/to/directory/ -mtime +<number of days> \( -name '*.jar' -o -name '*.cp' \) -name 'ex*' -exec rm -rf {} \;
find
dovresti usare il -daystart
modificatore per forzare il -mtime
valore a mezzanotte.