Scrivo di seguito il comando per eliminare tutti i file più vecchi di 7 giorni, ma non funziona:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Come posso rimuovere questi file?
Scrivo di seguito il comando per eliminare tutti i file più vecchi di 7 giorni, ma non funziona:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
Come posso rimuovere questi file?
Risposte:
Come ha sottolineato @Jos, hai perso uno spazio tra name
e '*.gz'
; anche per accelerare l'utilizzo dei comandi -type f
opzione per eseguire il comando su f iles solo.
Quindi il comando fisso sarebbe:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: Il comando unix per la ricerca di f iles / d irectories / l inchiostri, ecc/path/to/
: la directory in cui iniziare la ricerca.-type f
: trova solo i file.-name '*.gz'
: elenca i file che terminano con .gz
.-mtime +7
: considera solo quelli con tempi di modifica più vecchi di 7 giorni.-execdir ... \;
: per ciascuno di questi risultati trovati, esegui il seguente comando in ...
.rm -- '{}'
: rimuove il file; la {}
parte è dove viene sostituito il risultato della ricerca dalla parte precedente. --
significa che i parametri di fine comando evitano di richiedere errori per quei file che iniziano con trattino .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
Da uomo ritrovamento :
-print0
True; print the full file name on the standard output, followed by a null character
(instead of the newline character that -print uses). This allows file names that contain
newlines or other types of white space to be correctly interpreted by programs that process
the find output. This option corresponds to the -0 option of xargs.
Che è un po 'più efficiente, perché equivale a:
rm file1 file2 file3 ...
al contrario di:
rm file1; rm file2; rm file3; ...
come nel -exec
metodo.
Un comando alternativo e anche più veloce sta usando il +
terminatore di exec invece di\;
:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
Questo comando verrà eseguito rm
solo una volta alla fine anziché ogni volta che viene trovato un file e questo comando è quasi altrettanto veloce dell'uso -delete
dell'opzione come segue in moderno find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
alla fine? Perché pasticciare con +
o \;
?
Fai attenzione a rimuovere i file con find. Esegui il comando con -ls per verificare ciò che stai rimuovendo
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Quindi estrarre il comando dalla cronologia e aggiungere-exec rm {} \;
Limita il danno che un comando find può fare. Se si desidera rimuovere i file da una sola directory, -maxdepth 1
impedisce a find di spostarsi tra le sottodirectory o di cercare nel sistema completo se si digita /media/bkfolder /
.
Altri limiti che aggiungo sono argomenti di nomi più specifici come -name 'wncw*.gz'
, l'aggiunta di un tempo più recente -mtime -31
e la citazione delle directory cercate. Questi sono particolarmente importanti se si stanno automatizzando le pulizie.
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
e'*.gz'
.