L’autre jour, je voulais faire un peu de ménage dans les logs mod_security d’un serveur. Le répertoire d’audit commençait à prendre de l’ampleur, et il fallait supprimer son contenu sans supprimer le répertoire lui-même.
Je pensais m’en sortir avec un simple rm /dossier, mais ce n’est pas la bonne commande. rm ne supprime pas un répertoire non vide sans option récursive, et un rm -rf mal placé peut vite transformer un petit ménage en épisode judiciaire.
La méthode propre consiste à utiliser find avec -mindepth 1 et -delete. On supprime ainsi tout ce qui se trouve dans le répertoire, sans supprimer le répertoire parent.
Vider un répertoire sans supprimer le dossier parent
Pour supprimer tous les fichiers et sous-répertoires contenus dans /home/logs/, sans supprimer /home/logs/ lui-même :
find /home/logs/ -mindepth 1 -deleteLangage du code : JavaScript (javascript)
L’option -mindepth 1 indique à find de ne pas agir sur le point de départ lui-même. Autrement dit, /home/logs/ est conservé, mais tout son contenu est supprimé.
L’option -delete supprime les fichiers et répertoires trouvés. La documentation GNU findutils précise que -delete supprime les fichiers trouvés et implique -depth, ce qui permet de supprimer les contenus avant les répertoires parents. Voir la documentation GNU findutils sur -delete.