193 votes

Le script shell supprime les dossiers de plus de n jours

J'ai des annuaires avec nom comme

 2012-12-12
2012-10-12
2012-08-08
 

Comment supprimer les anciennes entrées datant de plus de 10 jours avec un script shell bash

446voto

sampson-chen Points 13413

Cela fera de manière récursive pour vous:

find /path/to/base/dir -type d -ctime +10 -exec rm -rf {} \;

Explication:

  • find: la commande unix pour trouver les fichiers / répertoires / liens etc.
  • /path/to/base/dir: le répertoire de commencer votre recherche.
  • -type d: seulement de rechercher les répertoires
  • -ctime +10: considérer seulement ceux avec des temps de modification de plus de 10 jours
  • -exec ... \;: pour chaque résultat trouvé, faire la commande suivante en ...
  • rm -rf {}: de manière récursive, à force de supprimer le répertoire {} de la partie est où le trouver à la suite est substitué dans la partie précédente.

Sinon, vous pouvez utiliser:

find /path/to/base/dir -type d -ctime +10 | xargs rm -rf

Ce qui est un peu plus efficace, car elle s'élève à:

rm -rf dir1 dir2 dir3 ...

par opposition à:

rm -rf dir1; rm -rf dir2; rm -rf dir3; ...

comme dans l' -exec méthode.

Note: voir Aussi @MarkReed de commentaire ci-dessous concernant l'usage privilégié avec la version moderne de l' find.

52voto

pmgarvey Points 91

Si vous souhaitez supprimer tous les sous-répertoires dans /chemin/vers/de base, exemple /chemin/vers/base/dir1, /chemin/vers/base/dir2 et /chemin/vers/base/dir3 mais vous ne voulez pas supprimer le /chemin/vers/de base. Vous devez ajouter -mindepth 1 et -maxdepth 1 qui ne contient que la liste des sous-répertoires dans /chemin/vers/de base. -mindepth 1 exclut en fait les /chemin/vers/la base de la liste qui empêche le /chemin/vers/la base de se supprimer. -maxdepth 1 sera SEULEMENT la liste des sous-répertoires dans /chemin/vers/de base tels que le /chemin/vers/base/dir1, /chemin/vers/base/dir2 et /chemin/vers/base/dir3 mais il ne fera pas la liste des sous-répertoires de manière récursive. Si ces sous-répertoires ne sont pas répertoriées, /chemin/vers/base/dir1/dir1, /chemin/vers/base/dir2/dir1 ou /chemin/vers/base/dir3/dir1 et ainsi de suite.

Supprimer tous les sous-répertoires dans /path/to/à la base de plus de 10 jours.

find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf

3voto

Awesome Points 81

OU

 rm -rf `find /path/to/base/dir -type d -mtime +10`
 

3voto

user129206 Points 1026

J'ai eu du mal à obtenir ce droit en utilisant les scripts fournis ci-dessus et quelques autres scripts en particulier lorsque les fichiers et les noms de dossier a saut de ligne ou des espaces.

Finalement tombé sur tmpreaper et il a été assez bien travaillé pour nous à ce jour.

tmpreaper -t 5d ~/Downloads


tmpreaper  --protect '*.c' -t 5h ~/my_prg

Source Original link

Il a des fonctionnalités comme test qui vérifie les répertoires de manière récursive et les répertorie. Possibilité de supprimer les liens symboliques, des fichiers ou des répertoires et aussi le mode de protection pour un certain modèle lors de la suppression de

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X