Warum dauert das Löschen über die Befehlszeile wesentlich kürzer als über eine grafische Benutzeroberfläche?

26

Etwas, worüber ich mich wunderte, als ich ungefähr ein Dutzend Bilder von meinem Computer löschte: Mit einem schnellen rm -rfBefehl über den Inhalt des Verzeichnisses waren alle Bilder im Handumdrehen verschwunden. Wenn ich ungefähr ein Dutzend Bilder in einen Papierkorb ziehe, dauert es manchmal 10 Sekunden oder länger.

Jetzt bin ich sicher, dass ein Teil davon vom Overhead der GUI und dergleichen stammt, und ein Teil davon kann die Tatsache sein, dass die Datei in irgendeiner Form noch "existiert", wenn sie in den Papierkorb verschoben wird, aber gibt es noch etwas anderes Konten für eine so große zeitliche Disparität? Sind "rm" und "delete" so grundlegend unterschiedliche Befehle, dass ich versuche, Äpfel und Apfelsinen zu vergleichen?

Jordan Plahn
quelle
1
Dies gilt auch für Fenster, vermutlich aus den unten angegebenen Gründen.
Chris H

Antworten:

38

Wie Sie zu Recht bemerkt haben, "löscht" die Benutzeroberfläche nicht nur die Dateien.

$ rm -rf 

Kehrt einfach in Ordner zurück und löscht die Dateien und Ordner, die sich dort befinden.

Die GUI durchsucht zuerst den gesamten Baum, um herauszufinden, was sich dort befindet (damit sie weiß, wie viel sie zum Zeichnen der hübschen Leiste tun muss), und durchsucht dann den Baum erneut, um die Dateien vom aktuellen Speicherort zum Speicherort der zu verschieben Mülleimer-Dateien für Ihre spezifische GUI. Das Verschieben dauert länger, da zuerst ein neuer eindeutiger Dateiname generiert, die Datei im Papierkorbordner verknüpft, dann die Verknüpfung zum aktuellen Ordner aufgehoben und ein Index darüber aktualisiert werden muss, woher die Dateien stammen, damit sie "rückgängig" gemacht werden können. viele Operationen statt nur einer.

In Gnome 3 werden die Dateien beispielsweise an den folgenden Speicherort verschoben:

~/.local/share/Trash/files/<filename>[.<version>]

Dabei filenamehandelt es sich um den ursprünglichen Dateinamen und versionum eine inkrementelle Versionsnummer, um sicherzustellen, dass die Datei eindeutig ist (die erste Dateiinstanz hat keine Versionsnummer). Damit verbunden ist eine .trashinfoim Ordner gespeicherte Datei:

~/.local/share/Trash/info/<filename>[.<version>].trashinfo

Diese Datei enthält den ursprünglichen Pfad der Datei vor dem Löschen sowie das Datum und die Uhrzeit des Löschens dieser Datei.

All diese zusätzlichen Vorgänge, die für jede einzelne Datei in dem zu löschenden Baum ausgeführt werden müssen, stellen sicher, dass Sie alle Dateien aus dem Papierkorb wiederherstellen können und dass Sie Dateien mit dem gleichen Namen aus dem Ordner löschen können gleichen Speicherort und noch ältere Versionen wiederherstellen.

Nichts davon wird mit einem einfachen rmoder mvBefehl gemacht.

Majenko
quelle
1
Hey, wer hat alle Kommentare gelöscht? Wir haben gerade herausgefunden, dass diese Antwort falsch sein könnte. Zumindest trash-clischeint es nicht rekursiv zu tun. Verschiebt Gnome 3 beim Löschen eines Ordners wirklich eine .trashinfoDatei rekursiv für jeden Unterordner und alle enthaltenen Dateien?
mb21
Schätze, es wurde ihnen zu laut! ;-)
Jordan Plahn