Comment supprimer tous les répertoires vides

11

(sur un système Linux)

J'ai un grand ensemble de sous-répertoires imbriqués sur un système de fichiers. Je voudrais tailler tous les chemins de répertoires qui ne contiennent aucun fichier.

En d'autres termes, je voudrais supprimer tous les répertoires où il n'y a pas de fichiers dans ce répertoire ou dans un sous-répertoire de ce répertoire récursivement.

AndrewR
la source

Réponses:

15

Pour toutes les versions de find

find -depth -type d -empty -exec rmdir {} \;

Si vous avez une version plus récente

 find -type d -empty -delete
Mike
la source
cool, ne connaissait pas le -deletedrapeau.
ansi_lumen
Moi non plus. J'ai appris quelque chose de nouveau. J'ai déjà écrit des scripts, en utilisant la récursivité pour trouver des répertoires vides. Cela simplifie considérablement cette tâche.
James
2
ya le drapeau vide aide vraiment ici. Cela fonctionne également pour trouver des fichiers vides si vous n'avez pas inclus le -type d ou simplement utilisé -type f
Mike
1

Ce n'est peut-être pas la meilleure solution, mais ce script fonctionne:

#!/bin/sh

while true
do
    DIRS=`find . -xdev -type d -exec find {}  -maxdepth 0 -empty  \;`
    if [ -z "$DIRS" ]; then
        exit 0
    else
        echo $DIRS | xargs rmdir
    fi
done

(basé en partie sur la réponse à la liste de tous les dossiers vides )

AndrewR
la source
1
Je viens de penser que cela ira dans une boucle infinie si vous n'avez pas la permission de supprimer l'un des répertoires vides, veuillez donc utiliser la réponse acceptée à la place :)
AndrewR
0
for i in `find -type d -empty`; do rmdir $i; done
ansi_lumen
la source
Proche, mais pas de cigare. Il vous manque le cas où la suppression d'un répertoire entraîne le vidage de son parent.
Simon Richter
C'est vrai. Je les ferais finddans une deuxième manche. Jamais eu ce cas en direct.
ansi_lumen