Ich habe einen Ordner mit 266778 Unterordnern. Wie kann ich es löschen?
Ich habe versucht
cd ~/.local/share/Trash/
sudo rm -rf *
aber es braucht viel zeit. Nach 1 Minute 25 Sekunden Echtzeit und 0,072 Sekunden Benutzerzeit wurden nur 2500 Ordner gelöscht. Auf diese Weise dauert das Löschen dieses Ordners mehr als zwei Stunden.
Gibt es eine schnellere Möglichkeit, diesen Ordner zu löschen? Warum gibt es einen so großen Unterschied zwischen Benutzerzeit und Echtzeit?
real 1m25.474s
user 0m0.072s
sys 0m28.142s
Ich benutze Linux 2.6.32 (Ubuntu 10.04.4 LTS).
filesystems
rm
Martin Thoma
quelle
quelle
Antworten:
Wenn Ihre Version von "find" den Unterbefehl -delete implementiert, können Sie es versuchen
In diesem Fall:
Einige Befehle, wie z. B. rm, führen den größten Teil ihrer Arbeit im Kernel aus. Genauer gesagt in den Dateisystemroutinen. Die für die Ausführung von Systemaufrufen aufgewendete Zeit wird auf diese Weise abgerechnet. Während der Befehl "rm" über einen langen Zeitraum ausgeführt wird, erledigt er im Benutzerland nicht viel. Die Systemaufrufe erledigen den größten Teil der Arbeit.
quelle
find ~/.local/share/Trash/*/ -delete
(Natürlich werden auch Dateien (und Verzeichnisse) in einem dieser Trashs gelöscht. / * / subdirs als auch)time
find directory -delete
wirklich schneller alsrm -rf directory
? Immerhin führen sie die gleiche Arbeit aus, und es gibt keine zwei Möglichkeiten, dies zu tun.Es hängt von Ihrer Definition von schnell ab . Die Antworten geben hier bereits eine gute Lösung für tatsächlich die Verzeichnisse aus dem Dateisystem entfernt wird , aber wenn das, was Sie wirklich brauchen , um das Verzeichnis zu befreien ist Namen so schnell wie möglich ein Umbenennungs auf demselben Dateisystem ist blitzschnell:
Technisch ist dies ein Betrug, da ich das Löschen nicht beschleunigt habe, aber praktisch ist es sehr nützlich: Ich verwende diesen Trick die ganze Zeit, damit ich nicht auf langsame Löschvorgänge warten muss.
quelle
mktemp
ist das , woran ich mich erinnern wollte ...rm -rf directory
oder istrm -rf *
natürlich die schnellste Methode, es sei denn, Ihre lokalerm
Implementierung ist fehlerhaft.Die Verwendung
find
bietet keine Vorteile.Ob dies schnell oder langsam ist, hängt hauptsächlich vom Dateisystem und der Betriebssystemimplementierung ab. Die Frage scheint also unangemessen zu sein.
UFS und ZFS auf Solaris sind dafür bekannt , mit dieser Art von Aufgabe sehr schnell sein , da beide Dateisystem - Implementierungen Hintergrund löschen Code verzögert umfassen , dass die Ursachen
unlink()
undrmdir()
Anrufe schnell selbst zurückzukehren , wenn die damit verbundene Aufgabe mehr Zeit insgesamt dauern wird.Mit dem verzögerten Löschen des Hintergrunds im Kernel können auch die Verzeichnisaktualisierungen schnell durchgeführt werden, was den gesamten Vorgang beschleunigt.
quelle
Dies ist nur eine Teilantwort, die Aufschluss über die drei vom Befehl zurückgegebenen Werte gibt. Zitiert aus der
time(1)
Manpage :quelle