Duplicata possible:
Comment supprimer tous les répertoires vides d'un sous-arbre?
Je crée très souvent des répertoires, dispersés sur mon répertoire personnel, et je trouve très difficile de les localiser et de les supprimer.
Je veux que tout alias/fonction/script trouve/localise et supprime tous les répertoires vides de mon répertoire personnel.
La commande find
est le principal outil pour les opérations récursives du système de fichiers. Utilisez le -type d
expression pour indiquer à find
que vous souhaitez rechercher uniquement des répertoires (et non des fichiers simples). La version GNU de find
prend en charge -empty
test, donc
$ find . -type d -empty -print
imprimera tous les répertoires vides sous votre répertoire actuel.
Utilisation find ~ -…
ou find "$HOME" -…
pour baser la recherche sur votre répertoire personnel (s'il ne s'agit pas de votre répertoire actuel).
Après avoir vérifié que cela sélectionne les répertoires appropriés, utilisez -delete
pour supprimer toutes les correspondances:
$ find . -type d -empty -delete
Vous pouvez appeler rmdir
sur chaque répertoire, puisque rmdir
ne supprimera un répertoire que s'il est vide:
find "$HOME" -type d -exec rmdir {} + 2>/dev/null
Si vous souhaitez également imprimer les répertoires supprimés, vous devrez vérifier s'ils sont vides:
find "$HOME" -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; files=("$1"/*); [[ ${files[@]} ]] || rmdir -v "$1"' -- {} \;
Voici un exemple de bash pur (version 4 ou supérieure):
shopt -s globstar
for dir in **/; do
files=("$dir"/*)
[[ ${files[@]} ]] || rmdir -v "$dir"
done