Le find
La commande est l'outil principal pour les opérations récursives du système de fichiers. Utilisez le -type d
expression à dire find
vous souhaitez rechercher uniquement des répertoires (et non des fichiers simples). La version GNU de find
supporte le -empty
testez donc
$ find . -type d -empty -print
imprimera tous les répertoires vides sous votre répertoire actuel.
Utilisez find ~ -…
ou find "$HOME" -…
pour baser la recherche sur votre répertoire personnel (si ce n'est pas votre répertoire actuel).
Après avoir vérifié que cela sélectionne les bons répertoires, utilisez -delete
pour supprimer toutes les correspondances :
$ find . -type d -empty -delete
Vous pouvez appeler le rmdir
sur chaque répertoire, depuis 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 en cours de suppression, 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 pur exemple bash (version 4 ou supérieure) :
shopt -s globstar
for dir in **/; do
files=("$dir"/*)
[[ ${files[@]} ]] || rmdir -v "$dir"
done