# Supprimer des sous-repertoires vides

**URL:** <https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800>\
**Category:** Support Debian\
**Created:** [Février 21, 2016, 6:00 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800 "2016-02-21T18:00:45Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![sidell](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/90ced4/32.png) [@sidell](https://www.debian-fr.org/u/sidell)\
**Post date:** [Février 21, 2016, 6:00 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/1 "2016-02-21T18:00:45Z")

</div>

Après réorganisation de ma musique, je me retrouve avec de nombreux répertoires et sous-répertoires vides.

Je voudrais les supprimer en une commande bash.

Ce que je cherche est du genre :

`rmdir -p a/b/c` (qui va supprimer le dossier c et les dossiers parents b et a) mais dans l’autre sens : je veux me placer dans mon dossier de musique et lancer une commande qui va supprimer a/b/c (a + b + c) si il n’y a pas de fichier dans c…

---

<div class="post-metadata">

**Author:** ![piratebab](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/58f4c7/32.png) [@piratebab](https://www.debian-fr.org/u/piratebab)\
**Post date:** [Février 21, 2016, 6:00 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/2 "2016-02-21T18:00:46Z")

</div>

ça me rappelle mes cours d’informatique ou une fonction s’appelle elle même pour parcourir des arbres.  
Tu fais une fonction qui teste si tu es au bout de la branche (pas de sous-rep), et si le rep est vide, tu le supprimes. Puis tu appelles cette fonction à l’intérieur d’elle même.  
Je ne sais pas si ça fonctionne en bash, mais en python , oui.  
Je crois que ça s’appelle la récursivité

---

<div class="post-metadata">

**Author:** ![sidell](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/90ced4/32.png) [@sidell](https://www.debian-fr.org/u/sidell)\
**Post date:** [Février 21, 2016, 6:00 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/3 "2016-02-21T18:00:52Z")

</div>

oui ou avec une boucle (loop) mais j’ai dû mal à transcrire ça par une commande.

Si quelqu’un a une proposition…

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Février 21, 2016, 6:00 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/4 "2016-02-21T18:00:53Z")

</div>

C’est très moche, mais ça marche :

```auto

```

(à adapter bien sûr à la profondeur de ton arborescence)

Je suis moi aussi intéressé par une commande plus propre.

---

<div class="post-metadata">

**Author:** ![sidell](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/90ced4/32.png) [@sidell](https://www.debian-fr.org/u/sidell)\
**Post date:** [Février 21, 2016, 6:00 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/5 "2016-02-21T18:00:57Z")

</div>

mdr je n’y avais pas pensé mais effectivement ça marche !

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 6:00 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/6 "2016-02-21T18:00:57Z")

</div>

[code]#!/bin/bash

# En paramètre, le dossier de départ pour la recherche/suppression récursive des dossiers vides

while liste\_dossiers\_vides=`find "$1" -type d -empty`  
do  
for un\_dossier\_vide in $liste\_dossiers\_vides  
do  
echo "Suppression du dossier vide “$un\_dossier\_vide”"  
rmdir "$un\_dossier\_vide"  
done  
done  
if [-e “$1”]; then  
$0 “$1” # récursivité  
fi  
[/code]  
Merci à ceux qui me donnerons des conseils pour rendre ce script plus “propre”

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 6:01 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/7 "2016-02-21T18:01:29Z")

</div>

[quote=“MicP”]`
if [-e "$1"]; then
    $0 "$1" # récursivité
fi
`  
Merci à ceux qui me donnerons des conseils pour rendre ce script plus “propre”[/quote]

Tu fait appel à la récursivité au cas où un répertoire vide supprimé rende un autre répertoire vide ? Ce n’est pas déjà assuré par ta boucle “while” ?

---

<div class="post-metadata">

**Author:** ![piratebab](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/58f4c7/32.png) [@piratebab](https://www.debian-fr.org/u/piratebab)\
**Post date:** [Février 21, 2016, 6:01 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/8 "2016-02-21T18:01:31Z")

</div>

d’ailleurs, pourquoi faire un while ?  
La récursivité assure le parcours de l’arbre

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 6:01 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/9 "2016-02-21T18:01:37Z")

</div>

Merci beaucoup pour vos conseils éclairés, je vais en tenir compte.  
J’ouvrirai [un autre fil dans “programmation”](https://www.debian-fr.org/demande-conseils-pour-script-effacement-recursif-de-dossiers-t44545.html) pour ne pas allonger celui là qui est résolu, et j’espère vous y retrouver.  
Merci encore.

---

<div class="post-metadata">

**Author:** ![Sivitri](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/ac91a4/32.png) [@Sivitri](https://www.debian-fr.org/u/Sivitri)\
**Post date:** [Février 21, 2016, 9:55 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/10 "2016-02-21T21:55:41Z")

</div>

Bonjour,

Désolé de déterrer ce topic mais j’ai une proposition plus simple pour ceux qui tomberaient sur ce forum.  
Je considère qu’on se trouve à l’endroit dans lequel on veut supprimer les dossiers et sous-dossiers… vides :

```auto

```

Explication :  
find \* -type d : cherche tous les répertoires (et sous-rep, etc…)  
-exec rmdir ‘{}’ : pour chaque dossier trouvé, rmdir est exécuté. Comme chacun le sait, rmdir ne supprime pas les dossiers non vides. Pour ne pas qu’il affiche une erreur pour les dossiers non vides, j’utilise l’option –ignore-fail-on-non-empty  
Donc seuls les répertoires, sous-rep, sous-sous-rep, etc… sont supprimés, et sans générer d’erreur.

---

<div class="post-metadata">

**Author:** ![BelZeButh](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/5fc32e/32.png) [@BelZeButh](https://www.debian-fr.org/u/BelZeButh)\
**Post date:** [Février 21, 2016, 9:55 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/11 "2016-02-21T21:55:51Z")

</div>

Salut,

> [@Sivitri](#):
>
> Pour ne pas qu’il affiche une erreur pour les dossiers non vides, j’utilise l’option [mono]–ignore-fail-on-non-empty[/mono]

C’est sympa ce retour.

J’ai une question cependant, en consultant le man de find, je ne trouve aucune référence à cette option, peux-tu nous en dire plus ?

---

<div class="post-metadata">

**Author:** ![NuX\_o](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/n/8491ac/32.png) [@NuX\_o](https://www.debian-fr.org/u/NuX_o)\
**Post date:** [Février 21, 2016, 9:55 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/12 "2016-02-21T21:55:51Z")

</div>

Bonjour,

Je me permets de répondre, c’est un option de rmdir ![:033](https://www.debian-fr.org/uploads/default/original/1X/42cd8bd0447ecac24cdff1e26fa990a5c8442791.gif "petard")

extrait du man rmdir :

[quote]–ignore-fail-on-non-empty

```
          ignorer les échecs qui ne sont causés que par la non-vacuité d'un répertoire[/quote]

```

c’est très mignon en effet ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![anon96191775](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/71c47a/32.png) [@anon96191775](https://www.debian-fr.org/u/anon96191775)\
**Post date:** [Février 21, 2016, 9:55 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/13 "2016-02-21T21:55:52Z")

</div>

En fait on peut faire encore plus simple avec find, sans utiliser rmdir :

```auto

```

Je pense que cette commande est suffisamment explicite, mais je peux détailler au besoin 😉

---

<div class="post-metadata">

**Author:** ![Sivitri](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/ac91a4/32.png) [@Sivitri](https://www.debian-fr.org/u/Sivitri)\
**Post date:** [Février 21, 2016, 9:55 UTC](https://www.debian-fr.org/t/supprimer-des-sous-repertoires-vides/58800/14 "2016-02-21T21:55:53Z")

</div>

Bien vu vv222 !  
Vaut mieux utiliser les options du find sans avoir recours au rmdir.  
Testé et approuvé ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")
