Der find
Der Befehl ist das primäre Werkzeug für rekursive Dateisystemoperationen. Verwenden Sie den -type d
Ausdruck, um find
mitzuteilen Sie möchten nur Verzeichnisse finden (und keine einfachen Dateien). Die GNU-Version von find
unterstützt den -empty
testen, also
$ find . -type d -empty -print
druckt alle leeren Verzeichnisse unterhalb Ihres aktuellen Verzeichnisses.
Verwenden Sie find ~ -…
oder find "$HOME" -…
um die Suche auf Ihr Home-Verzeichnis zu stützen (wenn es nicht Ihr aktuelles Verzeichnis ist).
Nachdem Sie überprüft haben, dass dies die richtigen Verzeichnisse auswählt, verwenden Sie -delete
um alle Übereinstimmungen zu löschen:
$ find . -type d -empty -delete
Sie können rmdir
anrufen in jedem Verzeichnis, seit rmdir
löscht ein Verzeichnis nur, wenn es leer ist:
find "$HOME" -type d -exec rmdir {} + 2>/dev/null
Wenn Sie auch die gelöschten Verzeichnisse drucken möchten, müssen Sie überprüfen, ob sie leer sind:
find "$HOME" -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; files=("$1"/*); [[ ${files[@]} ]] || rmdir -v "$1"' -- {} \;
Hier ist ein reines Bash-Beispiel (Version 4 oder höher):
shopt -s globstar
for dir in **/; do
files=("$dir"/*)
[[ ${files[@]} ]] || rmdir -v "$dir"
done