web-dev-qa-db-fra.com

Comment faire en sorte que mon système supprime tous les fichiers d’un répertoire donné plus ancien qu’un certain temps tout en préservant la structure du répertoire?

J'ai un répertoire sur ma machine, je le considère comme mon propre répertoire tmp, mais il se trouve dans mon répertoire ~. Et je veux faire en sorte que mon système supprime tous les fichiers tous les 3 heures (tout en conservant intactes la structure de répertoires, mais en supprimant tous les fichiers de tous les niveaux des répertoires) ce répertoire de plus d'une journée.

J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18, est-ce possible? Et si oui, comment? Je voudrais que cela soit entièrement automatisé sans aucune interaction utilisateur nécessaire. Cela devrait être quelque chose qui démarre automatiquement quand je me connecte, donc je n’aurais pas besoin d’exécuter quelque chose à chaque démarrage.

12
user364819

Utiliser find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp est le répertoire à rechercher de manière récursive, changez-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 +1 mais find ignorera toute fraction de temps lors du calcul du nombre de jours. Ainsi, -mtime +1 correspondra à un fichier si la dernière modification a été effectuée il y a au moins 2 jours.

En citant man find, -mtime a la même convention temporelle que -atime:

-au moment n

Le fichier a été consulté pour la dernière fois il y a n * 24 heures. Lorsque find a déterminé combien de fois le fichier avait été accédé il y a 24 heures, toute fraction est ignorée. Par conséquent, pour correspondre à -atime +1, un fichier doit avoir été utilisé il y a au moins deux jours.

Notez également que si vous voulez de la précision, vous devriez regarder l'option -mmin de find pour indiquer le temps en minutes.

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

Exécutez crontab -e et ajoutez:

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

Utilisation de zsh pour supprimer les fichiers:

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

Ajout à cron:

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

Vous devriez pouvoir supprimer tous les fichiers de plus d'un jour dans /home/username/directory et tous les répertoires ci-dessous avec:

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

Et pour planifier cette commande toutes les trois heures, définissez-la comme un travail 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 à l'heure (c'est-à-dire la minute 0), donc 3 h, 6 h, etc.

Allez dans le cron et crontabmanpages pour plus d'informations à leur sujet.

6
Limecat