PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash Finden und Löschen aller leeren Verzeichnisse



marsnacht
30-04-2007, 11:30
Mit

find . */ -exec rmdir "{}" ";"

findet und loescht man alle leeren Verzeichnisse ab der Ebene wo man sich
gerade befindet. Allerdings werden Fehlermeldungen ausgegeben, weil ja einige Verzeichnisse nicht leer sind und daher nicht gelöscht werden können.

Genau diese Fehlermeldungen will ich nicht haben.

habe es auch schon mit
find . */ -exec rmdir "{}" --ignore-fail-on-non-empty ";"
und mit

find . */ -exec rmdir --ignore-fail-on-non-empty "{}" ";"

probiert. Leider erfolglos.

Welchen anderen Ansatz gibt es noch?
Vielen Dank!

undefined
30-04-2007, 14:35
Du solltest auch schon nur nach Verzeichnissen suchen.
Mit einem Descriptor kannst du die Meldungen unterdrücken.


find . -mindepth 1 -type d -exec rmdir {} \; 2> /dev/null
# oder
find . -mindepth 1 -type d -exec rmdir --ignore-fail-on-non-empty {} \;

jan61
10-05-2007, 21:44
Du solltest auch schon nur nach Verzeichnissen suchen.
Mit einem Descriptor kannst du die Meldungen unterdrücken.


find . -mindepth 1 -type d -exec rmdir {} \; 2> /dev/null
# oder
find . -mindepth 1 -type d -exec rmdir --ignore-fail-on-non-empty {} \;



oder man nutzt den find gleich noch für das Aussortieren nicht-leerer Verzeichnisse:

find . -mindepth 1 -type d -empty -exec rmdir {} \;

Wenn Du rekursiv arbeitest und auch die Verzeichnisse löschen willst, die nach dem Aufräumen ihrer Unterverzeichnisse leer werden, dann gibts da auch eine find-Option für:

find . -mindepth 1 -type d -empty -depth -exec rmdir {} \;
Damit wird der Inhalt eines Verzeichnis vor dem Verzeichnis selbst behandelt.

Und wenn es viele Verzeichnisse sind, dann empfiehlt sich xargs statt -exec (da wird jedesmal ein neuer Prozess gestartet):

find . -mindepth 1 -type d -empty -depth -print | xargs rmdir

Jan