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
.