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.