Commande Linux rmdir : Comment supprimer des répertoires vides

La commande rmdir sous Linux supprime les répertoires vides. Elle laisse intacts les répertoires contenant des fichiers ou des sous-répertoires, vous permettant ainsi de supprimer des répertoires vides tout en préservant leur contenu.

Suppression des répertoires vides

Spécifiez le chemin du répertoire à supprimer. Les chemins relatifs sont résolus depuis le répertoire de travail actuel, donc vérifiez l'emplacement et la cible avec pwd et ls -la avant d'exécuter la commande.

rmdir empty-dir

Un répertoire vide est normalement supprimé sans sortie. S'il contient des fichiers ou des sous-répertoires, il n'est pas supprimé et une erreur telle que Directory not empty apparaît. Les messages d'erreur dépendent de la langue du système. Les répertoires supprimés ne sont normalement pas déplacés vers la corbeille, donc confirmez d'abord la cible.

Si vous spécifiez plusieurs répertoires, la commande tentera de supprimer chacun d'eux. Même si certains échouent parce qu'ils ne sont pas vides, d'autres cibles peuvent quand même être supprimées, donc vous ne devez pas considérer cette opération comme complètement réussie ou complètement annulée.

rmdir first-dir second-dir

Essayez-le vous-même

Effectuez l'exercice suivant dans un emplacement qui ne chevauche pas les fichiers existants. Si rmdir-practice existe déjà, choisissez un autre nom, et si la création du répertoire échoue, n'exécutez pas la commande suivante. Si vous utilisez un nom différent, remplacez rmdir-practice dans les commandes ci-dessous par ce nom.

mkdir rmdir-practice

Si la création réussit, entrez dans le répertoire de l'exercice avec la commande suivante et créez des répertoires vides et des répertoires contenant des fichiers.

cd rmdir-practice
mkdir empty busy
touch busy/example.txt

empty est vide, et busy contient des fichiers. Essayez de supprimer les deux répertoires dans l'ordre.

rmdir empty
rmdir busy

La première commande supprime empty. La seconde échoue parce que busy n'est pas vide, et les fichiers restent. Vous pouvez utiliser la commande suivante pour vérifier même les éléments cachés.

ls -la busy

. et .. dans la sortie font référence aux répertoires actuel et parent. S'il y a d'autres fichiers ou sous-répertoires, il n'est pas vide. La pratique suivante de -p est également effectuée dans ce répertoire. Lors de la suppression des fichiers de pratique, vérifiez d'abord la cible.

Option -p pour supprimer jusqu'au répertoire parent

-p ou --parents tente de supprimer les répertoires depuis le répertoire spécifié jusqu'aux répertoires parents dans l'ordre. Chaque répertoire doit être vide à ce moment-là. Vous pouvez le vérifier dans le répertoire de pratique comme suit.

mkdir -p a/b/c
rmdir -p a/b/c

S'il n'y a pas d'autre contenu, ils seront supprimés dans l'ordre c, b, a. S'il y a d'autres fichiers dans le répertoire parent, la suppression des répertoires inférieurs pourrait réussir mais la suppression du répertoire parent pourrait échouer. Par conséquent, assurez-vous que tout le chemin est destiné à être supprimé avant d'exécuter. Après avoir terminé l'exercice, retournez dans le répertoire parent avec cd ...

Afficher les opérations et ignorer les répertoires non vides

-v ou --verbose affichent des messages concernant le répertoire en cours de traitement. Vérifiez les messages d'erreur pour déterminer si la suppression a réellement eu lieu.

rmdir -v empty-dir

L'option --ignore-fail-on-non-empty de GNU rmdir ignore l'échec de suppression qui se produit parce que le répertoire n'est pas vide. Le répertoire ou son contenu ne sont pas supprimés. La commande suivante est exécutée depuis l'emplacement parent du répertoire de pratique.

rmdir --ignore-fail-on-non-empty rmdir-practice/busy

Cette option ignore uniquement les répertoires s'ils ne sont pas vides. Ce n'est pas une option qui ignore d'autres erreurs telles que les chemins manquants ou le manque de permissions. Si seules des erreurs ignorées se produisent, le statut de sortie peut être affiché comme réussi, donc ne jugez pas que tous les répertoires ont été supprimés uniquement sur la base du statut de sortie. Vous pouvez vérifier le comportement détaillé de l'option dans le manuel GNU rmdir.

Vérification en cas d'échec de la suppression

  • Non vide : Remplacez directory par le chemin réel dans ls -la directory pour vérifier les fichiers et sous-répertoires cachés. Dans les ls courants, les éléments dont le nom commence par un point peuvent ne pas être visibles.
  • Problème de permission : Vérifiez les permissions, la propriété et l'état du système de fichiers de la cible et de son répertoire parent. La suppression nécessite généralement les permissions d'écriture et de recherche pour le répertoire parent, et d'autres restrictions peuvent également s'appliquer.
  • Problème de chemin ou de cible : Vérifiez le nom et l'emplacement actuel. Un lien symbolique pointant vers un répertoire est différent du répertoire lui-même, donc vérifiez avec ls -ld.

rmdir * permet au shell de passer plusieurs noms dans le répertoire courant à la commande. Des fichiers peuvent également être inclus, et les noms cachés ne sont généralement pas inclus, il est donc plus sûr de vérifier d'abord la cible avec ls -la et de spécifier les répertoires nécessaires. Si vous devez supprimer un répertoire contenant des fichiers, vous ne pouvez pas le faire avec rmdir, et la suppression des fichiers doit être décidée séparément après avoir examiné le contenu.