Find – Rechercher des fichiers pour les supprimer

Dans mes diverses activités parallèles (en marge de la vraie vie), j’ai eu besoin d’améliorer un de mes systèmes.
Il me fallait, en effet, obtenir la suppression de certains éléments de manière régulière et automatique.

Mise en situation

Imaginez que vous êtes en possession d’un dispositif qui créé des fichiers (textes, images, … Peu importe) et les stocke.
Vous pouvez vouloir les conserver sans pour autant les garder Ad Vitam Æternam (ça ne sert pas forcément à grand chose et ça prend de la place).

Principe

L’idée est de trouver des fichiers puis de les supprimer.

Dans mon cas, ces fichiers débutent forcément par le même nom, on fera donc une recherche avec le nom.

Par contre, ils sont situés dans des dossiers différents (je génère automatiquement un dossier au nom du jour).
Cependant, tous ces dossiers sont des sous-dossiers d’un répertoire général ; la commande va donc prendre en compte le répertoire global (tout en incluant les sous-dossier dans la recherche).

Il faut également tenir compte de la date de modification pour savoir si on supprime ou pas.

Commande magique

Ma commande est simplement :

find /le/chemin/du/dossier/numero1/ -mtime +30 -name "20*" -type f -print -exec /bin/rm -rf "{}" \; && find /le/chemin/du/dossier/numero1/ -mtime +30 -name "20*" -type f -print -exec /bin/rm -rf "{}" \;

Explications

find /le/chemin/du/dossier/ est la commande de recherche et sont lieu de recherche.

-mtime +30 permet de filtrer les fichiers de plus de 30 jours. En réalité, c’est plutôt les fichiers dont les données ont été modifiées il y a plus de 30 fois 24h (petite nuance).

-name "20*" va filtrer uniquement les fichiers dont le nom débute par “20” car “*” est le caractère d’échappement. Ce caractère peut être utiliser pour cibler précisément. On peut filtrer par une partie du nom avec “*mot*” ; un type de fichier avec “*.jpg” ; …

-type f car je cherche des fichiers classiques (-type d pour un répertoire par exemple)

-print car je veux voir le résultat (au pré-démarrage, avant l’interface graphique, je sais si des fichiers ont été effacés)

-exec pour exécuter la commande qui suivra … et …

/bin/rm -rf "{}" \; puisque mon but est de supprimer les fichiers trouvés 😀

Conclusion

Et voilà comment une simple ligne ajoutée dans mon rc.local (sous RaspberryPiOS, on a encore /etc/rc.local) me fait le ménage (ou pas) de manière automatisée dans 3 endroit différents à chaque démarrage.

A propos de Alban

Papa de 4 enfants étant lui-même resté un enfant. Diététicien-Nutritionniste tombé par obligation dans l'informatique à 22 ans pour le boulot et s'étant "un peu" pris au jeu ... Pas un génie de l'informatique (loin de là), mais intéressé et carrément orienté Linux et entraide. Lassé de l'évolution du Monde de la Santé dans lequel les patients sont de plus en plus à traiter comme des clients (je suis un soignant !!!), j'ai opté pour une reconversion en repartant en Alternance. D'abord dans le cadre d'un BTS SIO option SISR (Solutions d’Infrastructure, Systèmes et Réseaux) en Septembre 2019. Après l’obtention du BTS (16,57/20 ;-) ), j'ai décidé de poursuivre (toujours en alternance) en Bac+3 avec un Bachelor Concepteur de Systèmes d'Information. Citation personnelle : « Si la réussite facile flatte l’égo, C’est de la persévérance que nait le plaisir de la réussite. »

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.