Dans une ancienne version d'Unix, la rm
commande supprimait les répertoires s'ils étaient vides. À partir de la page de manuel Research Unix Eighth Edition pour rm : "Si une entrée est un répertoire, elle n'est supprimée que si elle est vide." J'aime ce comportement, j'ai donc cet alias dans mon /etc/profile
: alias rm='rm -d'
j'utilise la version GNU coreutils de rm
, dans laquelle on -d
dit rm
d'aller de l'avant et de supprimer les répertoires s'ils sont vides.
Jusqu'ici tout va bien. Cet alias me permet d'utiliser rm
comme autrefois. Cependant, je voudrais aller plus loin. J'aimeraisrm
pour supprimer un répertoire même s'il contient d'autres répertoires, tant que les répertoires sont la seule chose qui s'y trouve. Peu importe la profondeur de la structure des répertoires, tant qu'il n'y a pas de fichiers, juste des répertoires vides (une fois que vous êtes en bas), je voudrais rm
tous les supprimer.
Pourrait-il être écrit comme un alias qui fonctionnerait toujours comme le normal rm
et supprimerait tous les fichiers qui lui sont passés?
rmdir -p
?mkdir -p a/b1/c2 && mkdir -p a/b2/c2; rmdir -p a/b1/c1;
, je reste avec a, a / b2 et a / b2 / c2. Ce que j'aimerais, c'est passer uniquement le niveau supérieur (a dans ce cas)rm
et supprimer tout ce qui se trouve en dessous.Réponses:
Vous voulez parcourir une arborescence de répertoires et voir si elle contient autre chose qu'un répertoire. Cela dépasse
rm
les capacités de. Vous avez besoin d'autres outils tels quefind
. Vous pouvez supprimer les répertoires vides sous un répertoire donné de cette façon (-depth
les répertoires parents qui deviennent vides sont également supprimés):Voici une fonction qui, pour chaque argument, supprime l'argument s'il s'agit d'un fichier non répertoire ou d'une arborescence répertoire ne contenant rien d'autre que des répertoires. Notez que cette fonction n'est pas atomique: si l'un des arguments change pendant son exécution, vous pouvez vous retrouver avec un message d'erreur, mais il est sûr en ce qu'il ne supprimera aucun non-répertoire dans un répertoire passé en argument.
la source