Angenommen, ich habe ein Verzeichnis mit dem Namen foo/
. Dieser Ordner enthält Unterverzeichnisse. Wie kann ich alle leeren Verzeichnisse in einem Befehl löschen?
command-line
delete
directory
justingrif
quelle
quelle
rm -rf <directory-name>
. Dadurch werden das Verzeichnis sowie der gesamte Inhalt einschließlich der Dateien und Unterverzeichnisse entfernt. Die-r
Option bedeutet, dass rekursiv gelöscht wird, während der-f
Befehl bedeutet, dass vor dem Löschen keine Eingabeaufforderung angezeigt wird. Wenn Sie jedoch vor dem Löschen eines Verzeichnisses / einer Datei dazu aufgefordert werden möchten, ersetzen Sie die-f
Option durch die-i
Option.stdout
Befehl (z. B.find
) in denstdin
anderen (z. B.rm
) eingegeben wird. Seien Sie jedoch sehr vorsichtig, da er möglicherweise Dateien / Verzeichnisse löscht, die Sie nicht möchten löschen! Weitere Informationen dazu finden Sie auf denman
Seiten der einzelnen Befehle. Um sicherzugehen, testen Sie solche Dinge immer in einem temporären Verzeichnis, bevor Sie die reale Sache ausprobieren.Sie können die
rmdir
Weigerung des Befehls, nicht leere Verzeichnisse zu löschen, und diefind -depth
Möglichkeit nutzen, die Verzeichnisstruktur von unten nach oben zu durchlaufen:(und ignorieren Sie die Fehler) oder fügen Sie
2>/dev/null
an, um sie wirklich zu ignorieren.Die
-depth
Option zumfind
Starten der Suche am unteren Rand des Verzeichnisbaums.rm -rf
löscht alle Dateien im Verzeichnis (und seinen Unterverzeichnissen und ....) UND alle Verzeichnisse und alles.quelle
Löscht alle leeren Verzeichnisse. Es wird ein Fehler für jedes nicht leere Verzeichnis und jede nicht leere Datei ausgegeben, um zu verhindern, dass diese Fehler Ihr Terminal überladen
quelle
rmdir * 2>/dev/null || true
. (Der find (1) Weg ist besser für Skripte, aber aus einem anderen Grund: weil er besser ausdrückt, was Sie tun möchten.)$HOME
. Mit einem bösen Grinsen.Für den Fall, dass Sie nur die direkten Unterverzeichnisse von löschen möchten
foo/
.quelle
Python-Ansatz
Das funktioniert so:
os.walk()
Funktion, um den Verzeichnisbaum rekursiv zu durchlaufen. Bei jeder Iterationr
wird auf den aktuellen Ordner gesetzt, auf den wir zugreifen, unds
enthält eine Liste der darin enthaltenen Verzeichnisser
sowief
eine Liste der Dateien in diesem Ordner. Wennf
unds
sind natürlich leer, wissen wir, dassr
das leer ist.empty
, die Liste aller Verzeichnisse, die leer sind, auf der Basis der oben genannten Auswertung zu erstellen .map()
wirdos.rmdir()
für jedes Element in derempty
Liste verwendet. Das Listenverständnis könnte ebenso wie eine Alternative verwendet werden.Als Skript wäre dies wie folgt:
quelle
/bin/sh
und Python ist eine elegantere Sprache als diese beiden