Sto usando Ubuntu 14 desktop. Uso questa macchina per eseguire il backup di altre macchine e come server FTP per le telecamere di sicurezza.
Ho bisogno di creare un lavoro cron che elimini automaticamente i file che sono più vecchi di 30 giorni. Ho fatto qualche ricerca e penso di aver trovato il comando giusto ma voglio assicurarmi di non perdere qualcosa prima di eseguirlo.
* 4 * * * find /home/USER/DIRECTORY1/DIRECTORY2/ -mindepth 1 -type f -mtime 29 -delete
Devo mettere "sudo" prima del comando trova?
Devo mettere "+" prima del numero di giorni "29"?
Risposta accettata:
Per prima cosa, inserisci il tuo find ... comando in un bash script e chiamalo script dal tuo crontab . Se hai una home directory crittografata (cat /home/.ecryptfs/$USER/.ecryptfs/Private.mnt ) dovrai memorizzare il tuo script al di fuori del tuo $HOME albero di directory. Mantenere un comando in crontab rende più difficili la configurazione, la registrazione e il debug e il crontab il parser dei comandi non è intelligente come bash 's.
Secondo, sempre, sempre, SEMPRE testare find con -print , e fallo funzionare, prima di considerare -delete .
Terzo, il find prova “-mtime 29 ” sta dicendo a find "Trova il mtime del file e restituisci True se è uguale a 29 . Dovresti usare -mtime +29 , che find vede come "more than 29 “, che è quello che vuoi. Da man find :
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
In quarto luogo, assicurati di avere l'accesso in scrittura alle directory in /home/USER/DIRECTORY1/DIRECTORY2/ .
Quinto, intendi /home/USER/DIRECTORY1/DIRECTORY2/ o /home/$USER/DIRECTORY1/DIRECTORY2/ ? Se $USER è per l'ID utente dell'utente, hai un problema:cron non definisce $USER nell'ambiente di runtime. Definisce $HOME , quindi potresti usare $HOME/DIRECTORY1/DIRECTORY2 .