Wie lösche ich alle leeren Verzeichnisse?


11

(auf einem Linux-System)

Ich habe eine große Anzahl verschachtelter Unterverzeichnisse in einem Dateisystem. Ich möchte alle Verzeichnispfade bereinigen, die überhaupt keine Dateien enthalten.

Mit anderen Worten, ich möchte jedes Verzeichnis, in dem sich keine Dateien in diesem Verzeichnis oder in einem Unterverzeichnis dieses Verzeichnisses befinden, rekursiv löschen.

Antworten:


15

Für alle Versionen von find

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

Wenn Sie eine neuere Version haben

 find -type d -empty -delete

cool, kannte die -deleteFlagge nicht.
ansi_lumen

Ich auch nicht. Ich habe etwas Neues gelernt. Ich habe bereits Skripte geschrieben und mithilfe der Rekursion leere Verzeichnisse gefunden. Dies vereinfacht diese Aufgabe erheblich.
James

2
ya die -leere Flagge hilft hier wirklich. Es funktioniert auch, um leere Dateien zu finden, wenn Sie den Typ d nicht angegeben oder nur den Typ f verwendet haben
Mike

1

Möglicherweise nicht die beste Lösung, aber dieses Skript funktioniert:

#!/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

(teilweise basierend auf der Antwort auf Alle leeren Ordner auflisten )


1
Mir ist gerade eingefallen, dass dies in eine Endlosschleife geht, wenn Sie keine Berechtigung zum Entfernen eines der leeren Verzeichnisse haben. Verwenden Sie stattdessen die akzeptierte Antwort :)
AndrewR

0
for i in `find -type d -empty`; do rmdir $i; done

Nah dran, aber keine Zigarre. Sie vermissen den Fall, dass das Entfernen eines Verzeichnisses dazu führt, dass das übergeordnete Verzeichnis leer wird.
Simon Richter

Das ist richtig. Ich würde findsie in einem zweiten Lauf. Ich hatte diesen Fall noch nie im wirklichen Leben.
ansi_lumen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.