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

Was ist der schnellste Weg, um alle Dateien und Unterordner in einem Verzeichnis zu entfernen?

Der schnellste Weg, sie aus diesem Verzeichnis zu entfernen, besteht darin, sie von dort zu entfernen, danach entfernen Sie sie einfach im Hintergrund:

mkdir ../.tmp_to_remove
mv -- * ../.tmp_to_remove
rm -rf ../.tmp_to_remove &

Dies setzt voraus, dass Ihr aktuelles Verzeichnis nicht die oberste Ebene einer gemounteten Partition ist (d. h. dass 06 befindet sich auf demselben Dateisystem).

Die 16 nach 23 (wie von Stéphane bearbeitet) ist erforderlich, wenn Sie Datei-/Verzeichnisnamen haben, die mit einem 31 beginnen .

Das obige entfernt die Dateien in Sekundenbruchteilen aus Ihrem aktuellen Verzeichnis, da es die Unterverzeichnisse nicht rekursiv behandeln muss. Das eigentliche Entfernen des Baums aus dem Dateisystem dauert länger, aber da es nicht im Weg ist, sollte seine tatsächliche Effizienz nicht so wichtig sein.


46 ist überraschend schnell und einfach. Sie müssen zuerst ein leeres Verzeichnis erstellen,

mkdir emptydir
rsync -a --delete emptydir/ yourdirectory/

50 ist das Verzeichnis, aus dem Sie die Dateien entfernen möchten.


Ein Problem mit 63 , oder das korrektere Äquivalent 76 ist, dass die Shell zuerst alle (nicht versteckten) Dateien im aktuellen Verzeichnis auflisten, sortieren und an 82 übergeben muss , was, wenn die Liste der Dateien im aktuellen Verzeichnis groß ist, unnötigen zusätzlichen Overhead hinzufügt und sogar fehlschlagen kann, wenn die Liste der Dateien zu groß ist.

Normalerweise würden Sie 95 ausführen stattdessen (was auch den Vorteil hätte, auch versteckte Dateien zu löschen). Aber die meisten 103 Implementierungen, einschließlich aller POSIX-konformen, werden dies ablehnen. Der Grund dafür ist, dass einige Shells (einschließlich aller POSIX-Shells) diese Fehlfunktion haben, die die Erweiterung von 113 ist glob würde 128 enthalten und 136 . Was bedeuten würde, dass 146 würde das aktuelle und übergeordnete Verzeichnis löschen, also 154 wurde modifiziert, um diese Fehlfunktion dieser Muscheln zu umgehen.

Einige Shells wie 168 (und andere Forsyth-Shell-Derivate), 177 oder 182 habe diese Fehlfunktion nicht. 196 hat einen 201 eingebaut, die Sie mit 212 aktivieren können das seit 221 ist 233 enthält nicht 244 noch 257 funktioniert gut mit 261 . Also in 271 , können Sie Folgendes tun:

autoload zsh/files
rm -rf .

Unter Linux können Sie Folgendes tun:

rm -rf /proc/self/cwd/

um das aktuelle Verzeichnis zu leeren oder:

rm -rf /dev/fd/3/ 3< some/dir

um ein beliebiges Verzeichnis zu leeren.

(Beachten Sie den abschließenden 283 )

Auf GNU-Systemen können Sie Folgendes tun:

find . -delete

Nun, wenn das aktuelle Verzeichnis nur wenige Einträge hat und der Großteil der Dateien in Unterverzeichnissen ist, macht das keinen signifikanten Unterschied und 295 wird wahrscheinlich das schnellste sein, das Sie bekommen können. Es wird für 304 erwartet (oder irgendetwas, das jede Datei entfernt) teuer, da es bedeutet, den Inhalt aller Verzeichnisse zu lesen und 310 aufzurufen bei jedem Eintrag. 323 selbst kann ziemlich kostspielig sein, da es das Modifizieren des Inodes der gelöschten Datei, des Verzeichnisses, das die Datei enthält, und einiger Dateisystemabbildungen oder anderer freier Bereiche beinhaltet.

336 und 340 (zumindest die GNU-Implementierungen) sortieren die Liste der Dateien bereits nach Inode-Nummer in jedem Verzeichnis, was einen großen Unterschied in Bezug auf die Leistung auf ext4-Dateisystemen machen kann, da es die Anzahl der Änderungen an den zugrunde liegenden Blockgeräten reduziert, wenn aufeinanderfolgend (oder schließen zueinander) Inodes werden nacheinander modifiziert.

354 sortiert die Dateien nach Namen, was die Leistung drastisch reduzieren könnte, es sei denn, die Reihenfolge nach Namen stimmt mit der Reihenfolge nach Nummer überein (wie wenn die Dateien aus einer sortierten Liste von Dateinamen erstellt wurden).

Ein Grund, warum 363 in einigen Fällen schneller sein kann, liegt daran, dass es anscheinend keine Sicherheitsvorkehrungen trifft, um Race-Bedingungen zu vermeiden, die dazu führen könnten, dass es in das falsche Verzeichnis absteigt, wenn ein Verzeichnis durch einen Symlink ersetzt wurde, während es wie 371 oder 387 tun.

Um ein bisschen weiter zu optimieren:

Wenn Sie die maximale Tiefe Ihres Verzeichnisbaums kennen, können Sie sie an 398 übergeben :

find . -maxdepth 3 -delete

Das spart 409 müssen versuchen, den Inhalt der Verzeichnisse in Tiefe 3 zu lesen.


Linux
  1. Warum kann Rm schreibgeschützte Dateien entfernen?

  2. Der schnellste Weg, ein Iso zu extrahieren?

  3. Was ist der beste Weg, um ein Signal an alle Mitglieder einer Prozessgruppe zu senden?

  4. Was ist der sicherste Weg, ein Verzeichnis in * nix zu leeren?

  5. Der schnellste Weg, um festzustellen, ob zwei Dateien unter Unix/Linux denselben Inhalt haben?

Der schnellste Weg zum rekursiven Zählen von Dateien unter Linux

Entpacken Sie alle Dateien in einem Verzeichnis

Was ist der schnellste Weg, um unter Linux eine Million Bilder von einem Verzeichnis in ein anderes zu verschieben?

Was bringt es, das Home-Verzeichnis zu verschlüsseln?

Was ist der schnellste Weg, um ein Skript auszuführen?

Wie entferne ich ._-Dateien in einem Verzeichnis? Ubuntu