Dlaczego usunięcie z wiersza poleceń zajmuje znacznie mniej czasu niż z GUI?

26

Zastanawiałem się nad tym, usuwając kilkanaście obrazów z mojego komputera: dzięki szybkiemu rm -rfpoleceniu zawartości katalogu wszystkie obrazy zniknęły w mgnieniu oka. Kiedy przeciągam te same kilkanaście obrazów do kosza na śmieci / recykling, zajmuje to czasami 10 sekund lub więcej.

Teraz jestem pewien, że część z nich pochodzi z narzutu GUI i tym podobnych, a niektóre z nich mogą wynikać z faktu, że plik nadal „istnieje” w jakiejś formie, jeśli zostanie umieszczony w koszu, ale czy jest coś jeszcze odpowiada za tak ogromne różnice czasowe? Czy „rm” i „delete” to tak zasadniczo różne polecenia, więc próbuję porównać jabłka i pomarańcze?

Jordan Plahn
źródło
1
Dotyczy to również okien, prawdopodobnie z tych samych powodów, które podano poniżej.
Chris H

Odpowiedzi:

38

Jak słusznie zauważyłeś, GUI robi więcej niż tylko „usuwa” pliki.

$ rm -rf 

po prostu przechodzi do folderów, usuwając pliki i foldery, które tam znajduje.

GUI najpierw skanuje całe drzewo, aby ustalić, co tam jest (więc wie, ile trzeba zrobić, aby narysować ładny pasek), a następnie ponownie przechodzi przez drzewo, przenosząc pliki z bieżącej lokalizacji do lokalizacji pliki kosza na określone GUI. To przenoszenie trwa dłużej, ponieważ najpierw musi wygenerować nową unikalną nazwę pliku, połączyć plik w folderze kosza, a następnie odłączyć go od bieżącego folderu i zaktualizować indeks, z którego pochodzą pliki, aby można je było „cofnąć” - wiele operacji zamiast tylko jednej.

Na przykład w Gnome 3 pliki są przenoszone do lokalizacji:

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

Gdzie filenamejest oryginalna nazwa pliku i versionjest to rosnący numer wersji, aby zapewnić unikalność pliku (pierwsza instancja pliku nie ma numeru wersji). Z tym powiązany jest .trashinfoplik przechowywany w folderze:

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

Ten plik zawiera oryginalną ścieżkę pliku przed usunięciem, a także datę i godzinę usunięcia tego pliku.

Wszystkie te dodatkowe operacje, które należy wykonać na każdym usuwanym pliku w usuwanym drzewie, zapewniają przywrócenie dowolnego pliku z kosza oraz usunięcie plików o tej samej nazwie z ta sama lokalizacja i nadal przywracaj wcześniejsze wersje.

Nic z tego nie jest wykonywane za pomocą polecenia prostego rmlub mvpolecenia.

Majenko
źródło
1
Hej, kto usunął wszystkie komentarze? Właśnie stwierdziliśmy, że ta odpowiedź może być błędna. Przynajmniej trash-clinie robi tego rekurencyjnie. Czy podczas usuwania folderu Gnome 3 tak naprawdę .trashinforekursywnie umieszcza plik dla każdego podfolderu i wszystkich plików zawierających?
mb21
Chyba było dla nich za głośno! ;-)
Jordan Plahn