GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich alle leeren Dateien und Verzeichnisse in Linux rekursiv löschen?

Dies ist ein wirklich einfacher Einzeiler:

find Parent -empty -delete

Es ist ziemlich selbsterklärend. Obwohl ich beim Überprüfen überrascht war, dass Parent/Child1 erfolgreich gelöscht wurde. Normalerweise würden Sie erwarten, dass das übergeordnete Element vor dem untergeordneten Element verarbeitet wird, es sei denn, Sie geben -depth an .

Das funktioniert, weil -delete impliziert -depth . Siehe das GNU find-Handbuch:

-delete Dateien löschen; true, wenn die Entfernung erfolgreich war. Wenn das Entfernen fehlgeschlagen ist, wird eine Fehlermeldung ausgegeben. Wenn -delete fehlschlägt, ist der Exit-Status von find ungleich Null (wenn es schließlich beendet wird). Die Verwendung von -delete schaltet automatisch die Option -depth ein.

Beachten Sie, dass diese Funktionen nicht Teil des Posix-Standards sind, aber höchstwahrscheinlich unter vielen Linux-Distributionen vorhanden sein werden. Möglicherweise haben Sie ein spezielles Problem mit kleineren wie Alpine Linux, da sie auf Busybox basieren, das -empty nicht unterstützt .

Andere Systeme, die nicht standardmäßige -empty enthalten und -delete gehören BSD und OSX, aber anscheinend nicht AIX.


Hier ist eine Lösung mit zwei Befehlen

Leere Dateien löschen

find Parent/ -type f -size 0 -delete

Versuchen Sie, alle zu entfernen Verzeichnisse

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null

NB rmdir kann keine nicht-leeren Verzeichnisse entfernen, daher ist es sicher auszuführen, wird aber Fehler produzieren, die wir verstecken

Wie oben, aber etwas genauer, was die Fehlermeldungen betrifft, die ignoriert werden. Möglicherweise müssen Änderungen vorgenommen werden, wenn die Meldung zwischen Distributionen unterschiedlich ist.

find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
  | grep -iv "Directory not empty$"

Sie können dies auch mit dem fd tun Werkzeug:

fd -t e -x rm -r

https://github.com/sharkdp/fd


Linux
  1. Linux Dateien und Verzeichnisse löschen

  2. So finden und löschen Sie leere Verzeichnisse und Dateien in Unix

  3. So finden und löschen Sie leere Verzeichnisse und Dateien in Linux

  4. Wie kann ich rekursiv alle Dateien in aktuellen und Unterordnern finden, basierend auf dem Platzhalterabgleich?

  5. Wie kann ich die Größe von Dateien und Verzeichnissen in Linux sehen?

So komprimieren Sie Dateien und Verzeichnisse unter Linux

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

So finden und löschen Sie doppelte Dateien in Linux

So finden und löschen Sie leere Verzeichnisse in Linux

Finden Sie Dateien und Verzeichnisse unter Linux ganz einfach

So löschen Sie Dateien und Verzeichnisse mit der Linux-Befehlszeile