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.