Linux / Commande rmdir : retirer seulement les répertoires vides
La commande GNU rmdir retire uniquement les répertoires vides. S’il reste un fichier, un sous-dossier ou un élément caché, elle échoue et laisse le dossier en place. Elle convient donc au nettoyage où la présence de données doit bloquer la suppression, à condition de vérifier le chemin choisi.
Les exemples emploient un dossier de pratique nouvellement créé sous votre compte. Le manuel officiel GNU Coreutils pour rmdir décrit -p, -v et le traitement des dossiers non vides ; vérifiez votre version avec rmdir --help ou man rmdir.
Que signifie « vide » pour rmdir ?
Le répertoire ne doit contenir aucune entrée à retirer, y compris un nom qui commence par un point comme .keep. rmdir ne supprime ni les fichiers ordinaires ni le contenu d’un dossier. Un répertoire qui paraît vide dans un ls sans option peut donc faire échouer la commande à cause d’un fichier caché. Utilisez ls -la -- CHEMIN ou find CHEMIN -mindepth 1 -maxdepth 1 -print pour voir ce qui y reste.
Pour retirer un dossier, le compte doit aussi avoir les droits requis sur son parent, notamment l’écriture et la traversée. Une autre tâche peut créer un fichier entre votre inspection et rmdir ; l’échec dans ce cas protège le contenu restant. Ne remplacez pas automatiquement la commande par rm -r pour faire disparaître l’erreur.
Syntaxe et suppression d’un seul dossier de pratique
rmdir [OPTION]... RÉPERTOIRE...
Indiquez un ou plusieurs dossiers existants. Placez -- avant un nom qui pourrait commencer par un tiret, et entourez les chemins contenant des espaces de guillemets. Sans -v, une réussite est généralement silencieuse. Le bloc suivant réserve un dossier de pratique et retire uniquement un sous-dossier vide créé pour cet essai :
lab=$(mktemp -d "$HOME/rmdir-lab.XXXXXX") || exit 1
mkdir -- "$lab/empty-demo"
find "$lab/empty-demo" -mindepth 1 -maxdepth 1 -print
rmdir -- "$lab/empty-demo"
test ! -e "$lab/empty-demo" && printf 'Dossier vide retiré\n'
find ne doit rien afficher et la dernière ligne doit indiquer « Dossier vide retiré ». Le dossier de pratique lab reste volontairement présent pour les étapes suivantes. Si le résultat diffère, relevez le chemin exact, le code de sortie et le message de rmdir avant toute nouvelle action.
Pourquoi un dossier apparemment vide n’est-il pas supprimé ?
Créez un fichier caché sans valeur dans un nouveau sous-dossier. La première tentative doit échouer, puis find révèle la raison. Le bloc ne supprime pas ce fichier : il montre seulement comment diagnostiquer l’échec.
mkdir -- "$lab/avec-cache"
printf 'démo\n' > "$lab/avec-cache/.keep"
if rmdir -- "$lab/avec-cache"; then
printf 'Résultat inattendu : vérifier le chemin\n' >&2
else
printf 'Dossier non vide conservé\n'
fi
find "$lab/avec-cache" -mindepth 1 -maxdepth 1 -print
Le résultat attendu est « Dossier non vide conservé », suivi du chemin de .keep. Un échec peut aussi venir d’un droit insuffisant, d’un montage, d’un nom incorrect ou d’un dossier déjà absent : ne masquez pas indistinctement tous ces cas. Pour libérer avec-cache, examinez d’abord si .keep doit être gardé ; s’il est réellement jetable, retirez-le dans le dossier de pratique puis relancez rmdir sur ce chemin précis. Le guide de la commande rm explique les différences lorsqu’il faut retirer du contenu.
Utiliser -p sans retirer un parent à conserver
Avec -p, GNU rmdir retire d’abord le dernier dossier indiqué, puis essaie chacun de ses parents. Par exemple, rmdir -p a/b/c tente a/b/c, a/b et a. Si un parent contient encore un élément, la suppression de ce parent échoue, mais les niveaux plus bas peuvent déjà avoir disparu. Ne lancez donc pas -p si vous devez conserver un parent vide.
Dans le dossier de pratique, le bloc suivant retire seulement les trois niveaux qui viennent d’être créés. Il affiche les suppressions avec -v et vérifie que le dossier racine lab reste présent :
mkdir -p -- "$lab/a/b/c"
rmdir -pv -- "$lab/a/b/c"
test ! -e "$lab/a" && test -d "$lab" && printf 'Parents de pratique retirés\n'
Vous devez voir des messages pour c, b et a, puis « Parents de pratique retirés ». Pour un chemin réel tel que /srv/app/build/tmp, -p peut remonter plus haut que prévu si tous les parents sont vides. Préférez alors des appels rmdir distincts, arrêtés à la frontière que vous souhaitez conserver.
Comprendre les options et les échecs dans un script
| Option GNU | Effet | Point de contrôle |
|---|---|---|
-p, --parents |
Retire le dossier puis essaie ses parents un à un. | Définissez la limite supérieure à préserver avant l’appel. |
-v, --verbose |
Affiche un message pour chaque suppression réussie. | Un message ne remplace pas la vérification des chemins restants. |
--ignore-fail-on-non-empty |
Ignore seulement les échecs dus à un dossier non vide. | Les erreurs de droit, de chemin absent ou d’autres causes restent à traiter. |
Dans un script, un échec de rmdir peut être le résultat attendu lorsque des données doivent rester en place. Identifiez la cause avant de l’ignorer. L’option --ignore-fail-on-non-empty est utile quand vous acceptez explicitement qu’un dossier occupé reste présent, notamment après une tentative -p ; elle ne rend pas une erreur de chemin ou de droits sans importance. Un simple 2>/dev/null cache les diagnostics qui permettraient de distinguer ces situations.
Pour nettoyer de nombreux dossiers vides dans une arborescence, le manuel GNU donne find DOSSIER -type d -empty -delete comme possibilité. Cette commande a une portée bien plus large qu’un rmdir nommé explicitement : affichez d’abord les résultats de find DOSSIER -type d -empty -print, confirmez la racine, les montages et la règle de rétention, puis décidez si une suppression en série est justifiée. Les répertoires devenus vides pendant le parcours peuvent aussi être pris en compte.
Quand préférer rmdir, rm -d ou rm -r ?
rmdir exprime le mieux « ne retire le dossier que s’il est vide ». GNU rm -d peut également retirer un dossier vide, surtout dans un script déjà organisé autour de rm. rm -r supprime récursivement le contenu ; choisissez-le uniquement après avoir inventorié et validé ce qui sera perdu. Un retour d’erreur de rmdir signale justement qu’il y a encore une décision à prendre.
Un dossier portant un point de montage ou utilisé par un service demande davantage de vérifications : inspectez le montage et le processus, puis arrêtez la procédure au lieu d’ajouter des options de suppression. Même lorsque rmdir est limité aux dossiers vides, le chemin que vous lui donnez doit être exact.
Questions fréquentes
rmdir peut-il retirer un dossier qui contient un fichier caché ?
Non. Un nom comme .keep est un contenu ; rmdir échoue et laisse le dossier en place.
Comment retirer les parents vides ?
Avec GNU rmdir -p CHEMIN. La commande remonte chaque niveau, donc vérifiez la frontière supérieure que vous souhaitez conserver.
Pourquoi rmdir échoue-t-il alors que find n’affiche rien ?
Vérifiez le chemin exact, les droits d’écriture et de traversée du parent, les montages et les changements concurrents. Un dossier vide n’est pas la seule condition de réussite.
rmdir est-il plus sûr que rm -r ?
Il limite l’opération aux dossiers vides, ce qui préserve le contenu restant. Il faut toujours vérifier que le chemin ciblé est celui que vous vouliez nettoyer.
La référence des commandes Linux par tâche situe rmdir parmi les opérations sur les dossiers.




