Come fare in modo che il mio sistema elimini tutti i file in una determinata directory più vecchia di un certo tempo mantenendo intatta la struttura della directory?


12

Ho una directory sulla mia macchina, pensala come la mia specie di tmpdirectory, ma è nella mia ~directory. E voglio farlo in modo che il mio sistema ogni 3 ore elimini tutti i file (pur mantenendo intatta qualsiasi struttura di directory, ma eliminando comunque tutti i file in tutti i livelli delle directory in modo ricorsivo) quella directory che è più vecchia di un giorno.

Sto eseguendo Ubuntu GNOME 15.10 con GNOME 3.18, è possibile farlo? E se sì, come? Vorrei che questo fosse completamente automatizzato senza che fosse necessaria l'interazione degli utenti. Questo dovrebbe essere qualcosa che si avvia automaticamente quando eseguo l'accesso, quindi non dovrei dover eseguire qualcosa ad ogni avvio.

Risposte:


21

Utilizzando find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp è la directory da cercare in modo ricorsivo, modificarla di conseguenza

  • -type f cercherà solo i file

  • -mtime +0 che corrisponderà a un file se è stato modificato l'ultima volta un giorno o più fa

  • -delete rimuoverà solo i file corrispondenti

Qui il problema è che la -mtime +0maggior parte potrebbe pensare di utilizzare -mtime +1ma findignorerà qualsiasi tempo frazionario durante il calcolo dei giorni. Quindi, -mtime +1corrisponderà a un file se l'ultima modifica è stata apportata almeno 2 giorni fa.

Citando man find, -mtimeha la stessa convenzione di temporizzazione di -atime:

-tempo n

Ultimo accesso al file n * 24 ore fa. Quando scopri quanti periodi di 24 ore fa è stato eseguito l'ultimo accesso al file, qualsiasi parte frazionaria viene ignorata, quindi per abbinare -atime +1, è necessario accedere a un file almeno due giorni fa.

Si noti inoltre che se si desidera la precisione, è necessario esaminare l' -mminopzione di findindicare il tempo in minuti.

Per eseguirlo periodicamente dopo 3 ore, è possibile aggiungere una cronvoce.

Esegui crontab -ee aggiungi:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

Utilizzo zshper rimuovere i file:

rm ~/tmp/**/*(.-m+0)

Aggiungendo a cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'

6

Dovresti essere in grado di eliminare tutti i file più vecchi di 1 giorno /home/username/directorye tutte le directory sottostanti con:

find /home/username/directory -type f -mtime +1 -delete

E per pianificare quel comando ogni tre ore, impostalo come cron job:

crontab -e

Quindi all'interno del crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

Che esegue il tuo comando ogni tre ore ogni ora (cioè minuto 0), quindi 3:00, 6:00 ecc.

Vai al crone crontab manpagesper maggiori informazioni su di loro.


4
Questa risposta è in realtà errata, vedere l'altra risposta .

4
Poiché questa risposta è errata e in realtà non dice altro che l'altra risposta, si prega di migliorare la risposta in modo che sia corretta e migliore dell'altra risposta o eliminarla.

5
@ParanoidPanda Capisco che vuoi risposte di alta qualità, ma commentare essenzialmente la stessa cosa due volte è piuttosto inutile e potrebbe essere visto come aggressivo, specialmente per un nuovo utente.
RPiAwesomeness il

2
@RPiAwesomeness: Beh, ho commentato la seconda volta perché ero a corto di tempo per modificare il mio primo commento e volevo anche dire che avrebbero dovuto eliminare la loro risposta che forse non era qualcosa di necessariamente compreso dal mio primo commento, anche se io non volevo che si sentissero sotto attacco e come se stessi solo dicendo che avevano dato la risposta sbagliata e ora devono eliminarla, quindi ho aggiunto un po 'di miglioramento. Ma posso vedere come questo potrebbe essere preso nel modo sbagliato, quindi ti chiedo di ricordare: un Panda diventa aggressivo solo quando gli porti via il bambù. ;-)
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.