Comment faire en sorte que mon système supprime tous les fichiers d'un certain répertoire plus anciens qu'un certain temps tout en conservant la structure du répertoire intacte?


12

J'ai un répertoire sur ma machine, pensez-y comme mon propre type de tmprépertoire, mais il est dans mon ~répertoire. Et je veux faire en sorte que mon système supprime toutes les 3 heures tous les fichiers (tout en conservant intacte toute structure de répertoires, mais en supprimant tous les fichiers à tous les niveaux des répertoires de manière récursive) ce répertoire qui est plus ancien qu'un jour.

J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18, cela peut-il être fait? Et si oui, comment? Je voudrais que cela soit entièrement automatisé sans interaction des utilisateurs. Cela devrait être quelque chose démarré automatiquement lorsque je me connecte, donc je ne devrais pas avoir besoin d'exécuter quelque chose à chaque démarrage.

Réponses:


21

En utilisant find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp est le répertoire à rechercher récursivement, modifiez-le en conséquence

  • -type f recherchera uniquement les fichiers

  • -mtime +0 qui correspondra à un fichier s'il a été modifié pour la dernière fois il y a un jour ou plus

  • -delete supprimera simplement le ou les fichiers correspondants

Ici, la capture est -mtime +0, la plupart pourraient penser à utiliser, -mtime +1mais findignoreront tout temps fractionné lors du calcul des jours. Donc, -mtime +1correspondra à un fichier si la dernière modification a été effectuée il y a au moins 2 jours.

Citant man find, -mtimea la même convention de synchronisation que -atime:

-time n

Le dernier accès au fichier a eu lieu il y a n * 24 heures. Lorsque vous savez combien de périodes de 24 heures le fichier a été consulté pour la dernière fois, toute partie fractionnaire est ignorée.Par conséquent, pour correspondre à -atime +1, un fichier doit avoir été consulté il y a au moins deux jours.

Notez également que si vous voulez de la précision, vous devriez regarder l' -mminoption d' findindiquer le temps en minutes.

Pour l'exécuter périodiquement après 3 heures, vous pouvez ajouter une cronentrée.

Exécutez crontab -eet ajoutez:

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

Utilisation zshpour supprimer les fichiers:

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

Ajout à cron:

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

6

Vous devriez pouvoir supprimer tous les fichiers de plus d'un jour dans /home/username/directoryet tous les répertoires en dessous avec:

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

Et pour planifier cette commande toutes les trois heures, définissez-la comme une tâche cron:

crontab -e

Puis à l'intérieur de la crontab:

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

Qui exécute votre commande toutes les trois heures sur l'heure (c.-à-d. Minute 0), donc 3h00, 6h00, etc.

Allez sur le cronet crontab manpagespour plus d'informations à leur sujet.


4
Cette réponse est en fait fausse, veuillez voir l'autre réponse .

4
Comme cette réponse est fausse et ne dit rien de plus que l'autre réponse, veuillez soit améliorer votre réponse pour qu'elle soit correcte et meilleure que l'autre réponse, soit la supprimer.

5
@ParanoidPanda Je comprends que vous voulez des réponses de haute qualité, mais commenter essentiellement la même chose deux fois est plutôt inutile et pourrait être considéré comme agressif, en particulier pour un nouvel utilisateur.
RPiAwesomeness

2
@RPiAwesomeness: Eh bien, j'ai commenté la deuxième fois parce que je n'avais plus de temps pour modifier mon premier commentaire, et je voulais également dire qu'ils devraient supprimer leur réponse, ce qui n'était peut-être pas nécessairement compris dans mon premier commentaire, même si je ne voulait pas qu'ils se sentent attaqués et comme je disais juste qu'ils ont donné la mauvaise réponse et doivent maintenant la supprimer, j'ai donc ajouté un peu d'amélioration. Mais je peux voir comment cela pourrait être pris dans le mauvais sens, alors je vous demande de vous souvenir: un Panda ne devient agressif que lorsque vous lui enlevez son bambou. ;-)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.