Pourquoi la suppression de la ligne de commande prend-elle beaucoup moins de temps que d'une interface graphique?

26

Quelque chose que je me demandais en supprimant une douzaine d'images de mon ordinateur: avec une rm -rfcommande rapide sur le contenu du répertoire, toutes les images avaient disparu en un clin d'œil. Lorsque je fais glisser la même douzaine d'images vers une poubelle / interdiction de recycler, cela prend parfois 10 secondes ou plus.

Maintenant, je suis sûr que certains d'entre eux proviennent de la surcharge de l'interface graphique et autres, et certains peuvent être le fait que le fichier "existe" toujours sous une forme quelconque s'il est mis dans la corbeille, mais y a-t-il autre chose qui explique une si grande disparité de temps? Est-ce que "rm" et "delete" sont des commandes fondamentalement différentes, donc j'essaie de comparer des pommes et des oranges?

Jordan Plahn
la source
1
C'est également vrai pour les fenêtres, probablement pour les mêmes raisons que celles indiquées ci-dessous.
Chris H

Réponses:

38

Comme vous l'avez remarqué à juste titre, l'interface graphique fait plus que simplement "supprimer" les fichiers.

$ rm -rf 

revient simplement dans les dossiers en supprimant les fichiers et les dossiers qu'il y trouve.

L'interface graphique analyse d'abord l'arborescence entière pour déterminer ce qu'il y a là (afin qu'elle sache combien il doit faire pour dessiner la jolie barre), puis elle revient à travers l'arborescence en déplaçant à nouveau les fichiers de l'emplacement actuel vers l'emplacement de la poubelle peut fichiers pour votre interface graphique spécifique. Ce déplacement prend plus de temps, car il doit d'abord générer un nouveau nom de fichier unique, lier le fichier dans le dossier de la corbeille, puis le dissocier du dossier actuel et mettre à jour un index d'où les fichiers proviennent afin qu'ils puissent être "annulés" - de nombreuses opérations au lieu d'une seule.

Par exemple, sur Gnome 3, les fichiers sont déplacés vers l'emplacement:

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

filenameest le nom du fichier d'origine et versionest un numéro de version incrémenté pour garantir que le fichier est unique (la première instance de fichier n'a pas de numéro de version). Associé à cela est un .trashinfofichier stocké dans le dossier:

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

Ce fichier contient le chemin d'origine du fichier avant sa suppression, ainsi que la date et l'heure auxquelles ce fichier a été supprimé.

Toutes ces opérations supplémentaires, qui doivent être effectuées sur chaque fichier individuel de l'arborescence que vous supprimez, garantissent que vous pouvez restaurer n'importe quel fichier de la corbeille et que vous êtes en mesure de supprimer des fichiers portant le même nom de la même emplacement et toujours restaurer les versions antérieures.

Rien de tout cela n'est fait avec une commande simple rmou mv.

Majenko
la source
1
Hé, qui a supprimé tous les commentaires? Nous étions juste en train de découvrir que cette réponse pouvait être fausse. Du moins trash-cline semble pas le faire récursivement. Lors de la suppression d'un dossier, Gnome 3 place-t-il vraiment un .trashinfofichier récursivement pour chaque sous-dossier et tous les fichiers contenant?
mb21
Je suppose que c'est devenu trop turbulent pour eux! ;-)
Jordan Plahn