Чому для видалення з командного рядка потрібно значно менше часу, ніж з графічного інтерфейсу?


26

Щось я замислювався над тим, як я видаляв із свого комп'ютера десяток зображень: Швидкою rm -rfкомандою на вміст каталогу всі зображення пропали миттєво. Коли я перетягую той самий десяток зображень на смітник / забороняє переробляти, іноді це займає 10 секунд і більше.

Тепер я впевнений, що частина цього походить від накладних даних графічного інтерфейсу та іншого, а дещо з цього може бути тим, що файл все ще "існує" в якійсь формі, якщо він поміщений у кошик, але чи є ще щось, що пояснюється така величезна різниця у часі? Чи є "rm" та "delete" просто такі принципово різні команди, тому я намагаюся порівняти яблука та апельсини?


1
Це вірно і в Windows, імовірно, з тих же причин, що наведені нижче.
Кріс Х

Відповіді:


38

Як ви справедливо помітили, GUI робить більше, ніж просто "видалення" файлів.

$ rm -rf 

просто повторюється в папки, видаляючи файли та папки, які вони знаходять там.

GUI спочатку сканує все дерево, щоб розібратися, що там є (тому воно знає, скільки потрібно зробити, щоб намалювати гарну смужку), а потім повторно повторюється через дерево, переміщуючи файли з поточного місця на місце розташування Файли для сміття для вашого конкретного графічного інтерфейсу. Цей переїзд займає більше часу, оскільки він повинен спершу створити нове унікальне ім’я файлу, зв’язати файл у папці сміття, потім від’єднати його від поточної папки та оновити індекс, звідки прийшли файли, щоб їх можна було "скасувати" - багато операцій замість лише однієї.

Наприклад, у Gnome 3 файли переміщуються до місця розташування:

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

Де filenameє оригінальне ім'я файлу, і versionзбільшується номер версії для забезпечення унікальності файлу (перший екземпляр файлу не має номера версії) З цим пов'язаний .trashinfoфайл, який зберігається в папці:

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

Цей файл містить оригінальний шлях до файлу перед видаленням, а також дату та час видалення цього файлу.

Усі ці додаткові операції, які потрібно виконати на кожному окремому файлі в дереві, яке ви видаляєте, переконайтеся, що ви можете відновити будь-який файл із кошика для сміття, а також ви можете видалити файли, названі тим самим, те саме місце розташування і досі відновити попередні версії.

Нічого з цього не робиться за допомогою простого rmчи mvкоманди.


1
Гей, хто видалив усі коментарі? Ми просто з'ясовували, що ця відповідь може бути неправильною. Принаймні trash-cli, схоже, це не відбувається рекурсивно. Видаляючи папку, чи дійсно Gnome 3 ставить .trashinfoфайл рекурсивно для кожної підпапки та всіх файлів, що містять файли?
mb21

Здогадайтесь, це стало надто розбещеним для них! ;-)
Джордан План
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.