Supprimer des fichiers selon leur ancienneté sous Linux

Photo of author
par KrustyHack
publié le
mis à jour le

La dernière fois j’avais besoin de supprimer des fichiers de mon serveurs Linux de backup mais en triant selon le nombre de jours d’ancienneté. J’ai trouvé une solution simple et je vous la partage donc aujourd’hui.

Utiliser find et rm pour trouver et supprimer

C’est là que la commande find vient à notre rescousse:

find /path/to/files* -mtime +30 -exec rm {} \;

Et hop, find va chercher tous les fichiers/dossiers dans /path/to/files datant de plus de 30 jours pour ensuite exécuter un rm dessus. Si vous voulez supprimer les dossiers, n’oubliez pas l’option -rf. Et faites attentions aux espaces entre rm, {} et \; qui sont importants.

Explication de la commande:

  • Le 1er argument est le chemin dans lequel on veut chercher les fichiers à supprimer. On peut évidemment y ajouter une wildcard (*)
  • Le 2ème argument, “-mtime”, est là pour spécifier sur quelle ancienneté, en jours, on veut filtrer les fichiers et dossiers trouvés. Si vous entrez +30 cela trouvera tous les fichiers de plus de 30 jours. On peut également utiliser “-30” pour trouver les fichiers de moins de 30 jours et juste “30” pour trouver les fichiers modifiés il y a exactement 30 jours.
  • Le 3ème argument, “-exec”, vous permet d’exécuter une commande sur les résultats trouvés. Ici, on les supprime avec “rm”. Mais on aurait très bien pu faire un “cat” ou un “ls”. Le “{} \;” est obligatoire en fin de commande
À LIRE  Installer une IP failover sur Linux

Récapitulatif des options principales de find

Il y a d’autres options pour find qui peuvent être très utiles. Voilà la liste des options principales de find:

  • -name : pour rechercher par nom de fichier
  • -type : pour rechercher par type de fichier
  • -user : pour rechercher par propriétaire
  • -group : pour rechercher par groupe
  • -size : pour rechercher par taille
  • -atime : pour rechercher par date de dernier accès
  • -mtime : pour rechercher par date de dernière modification
  • -ctime : pour rechercher par date de création
  • -perm : pour rechercher par permissions
  • -links : pour rechercher par nombre de liens au fichier

Plus d’infos sur la commande find : http://www.linux-france.org/article/memo/node126.html

6 réflexions au sujet de “Supprimer des fichiers selon leur ancienneté sous Linux”

  1. bonjour
    pour supprimer les dossiers ou faudrait il mettre le -rf?
    find /volume1/FASP-OUT-B/* -cmin +1 -rf -exec rm {} ;
    Mais cela ne fonctionne pas, et que veut dire rf?
    Pour moi f veut dire force
    Merci d’avance, car votre ligne de command ma bien servi

    Répondre
    • Ay,

      Je dirais que le -rf il faut le mettre après le rm.

      Exemple : find /volume1/FASP-OUT-B/* -cmin +1 -exec rm -rf {} ;

      Effectivement le `f` signifie force (ignorer les fichiers et arguments inexistants, ne jamais demander) et le `r` récursif (supprimer les répertoires et leur contenu récursivement).

      Je suis content que cela ait été utile ! 🙂

      Répondre
  2. Bonjour, pour supprimer tous les fichiers d’un même type a l’exception du plus récent de chaque mois, une idée? merci d’avance.

    Répondre
  3. Bonjour,

    Merci pour ces explications, j’ai trouvé que l’on peut aussi remplacé la fin « -exec rm -rf {} ; » par « -delete », cela fonctionne aussi de manière récursive sans ajouter d’option.

    Répondre

Laisser un commentaire