Rekursives Löschen leerer Verzeichnisse:
find -type d ! -name .|sort -r|while read dir; do \
rmdir --ignore-fail-on-non-empty "$dir"; done
Die Befehle bewirken folgendes:
find -type d ! -name . findet alle Verzeichnisse: Die Option ! -name . sorgt dafür, dass das aktuelle Verzeichnis (.) nicht in der Ergebnisliste enthalten ist und somit wirklich nur Unterverzeichnisse berücksichtigt werden. -type d beschränkt die Suche auf Verzeichnisse.
sort -r sortiert die Verzeichnisse dann in umgekehrter Reihenfolge.
--ignore-fail-on-non-empty verhindert die Fehlermeldung, dass ein Verzeichnis nicht gelöscht werden kann, weil es nicht leer ist.
Das entspricht dann bspw. den einzelnen Befehlen
rmdir --ignore-fail-on-non-empty ./dir3/dir4
rmdir --ignore-fail-on-non-empty ./dir3
rmdir --ignore-fail-on-non-empty ./dir1/dir2
rmdir --ignore-fail-on-non-empty ./dir1
Befindet sich bspw. in dir4 eine Datei, schlägt rmdir ./dir3/dir4 fehl, weil das Verzeichnis nicht leer ist. Der nächste Befehl schlägt ebenfalls fehl, da in dir3 noch dir4 enthält. Da im Beispiel dir1 und dir2 leer sind, werden beide entfernt.