Mengapa menghapus dari baris perintah memakan waktu jauh lebih sedikit daripada dari GUI?

26

Sesuatu yang saya ingin tahu ketika saya menghapus selusin gambar dari komputer saya: Dengan rm -rfperintah cepat pada isi direktori, semua gambar hilang dalam sekejap. Saat saya seret selusin gambar yang sama ke tempat sampah / daur ulang, kadang-kadang butuh 10 detik atau lebih.

Sekarang saya yakin beberapa di antaranya berasal dari overhead GUI dan semacamnya, dan beberapa di antaranya mungkin fakta bahwa file tersebut masih "ada" dalam beberapa bentuk jika dimasukkan ke recycle bin, tetapi apakah ada hal lain yang menyumbang perbedaan waktu yang sangat besar ? Apakah "rm" dan "delete" hanyalah perintah yang berbeda secara mendasar, jadi saya mencoba membandingkan apel dan jeruk?

Jordan Plahn
sumber
1
Ini juga berlaku di windows, mungkin karena alasan yang sama seperti yang diberikan di bawah ini.
Chris H

Jawaban:

38

Seperti yang Anda perhatikan dengan benar, GUI melakukan lebih dari sekadar "menghapus" file.

$ rm -rf 

hanya berulang ke folder menghapus file dan folder yang ditemukannya di sana.

GUI pertama-tama memindai seluruh pohon untuk mencari tahu apa yang ada di sana (jadi ia tahu berapa banyak yang harus dilakukan untuk menggambar bilah cantik), kemudian berulang melalui pohon lagi memindahkan file dari lokasi saat ini ke lokasi file tempat sampah untuk GUI spesifik Anda. Perpindahan itu membutuhkan waktu lebih lama, karena harus terlebih dahulu menghasilkan nama file unik baru, menautkan file di folder tempat sampah, kemudian memutuskan tautannya dari folder saat ini, dan memperbarui indeks dari mana file berasal sehingga mereka dapat "dibatalkan" - banyak operasi, bukan hanya satu.

Misalnya, pada Gnome 3 file dipindahkan ke lokasi:

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

Di mana filenamenama file asli, dan versionmerupakan nomor versi yang bertambah untuk memastikan file tersebut unik (instance file pertama tidak memiliki nomor versi). Terkait dengan itu adalah .trashinfofile yang disimpan di folder:

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

File ini berisi path asli file sebelum dihapus, serta tanggal dan waktu file ini dihapus.

Semua operasi tambahan ini, yang harus dilakukan pada masing-masing dan setiap file di pohon yang Anda hapus, memastikan bahwa Anda dapat mengembalikan file apa pun dari tempat sampah, dan bahwa Anda dapat menghapus file dengan nama yang sama dari lokasi yang sama dan masih mengembalikan versi sebelumnya.

Tidak ada yang dilakukan dengan perintah rmatau sederhana mv.

Majenko
sumber
1
Hei, siapa yang menghapus semua komentar? Kami hanya mencari tahu bahwa jawaban ini mungkin salah. Setidaknya trash-clisepertinya tidak melakukannya secara rekursif. Saat menghapus folder, apakah Gnome 3 benar-benar meletakkan .trashinfofile secara rekursif untuk setiap subfolder dan semua file yang mengandung?
mb21
Kira itu terlalu gaduh untuk mereka! ;-)
Jordan Plahn