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…
ç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é
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”
Merci beaucoup pour vos conseils éclairés, je vais en tenir compte.
J’ouvrirai un autre fil dans “programmation” pour ne pas allonger celui là qui est résolu, et j’espère vous y retrouver.
Merci encore.
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 :
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.