¿Por qué la eliminación de la línea de comandos lleva mucho menos tiempo que desde una GUI?

26

Algo de lo que me preguntaba cuando estaba borrando una docena de imágenes de mi computadora: con un rm -rfcomando rápido sobre el contenido del directorio, todas las imágenes desaparecieron en un instante. Cuando arrastro la misma docena de imágenes a una papelera / prohibición de reciclaje, a veces toma 10 segundos o más.

Ahora estoy seguro de que parte proviene de la sobrecarga de la GUI y tal, y parte de ello puede ser el hecho de que el archivo todavía "existe" de alguna forma si se coloca en la papelera de reciclaje, pero ¿hay algo más que explica una disparidad de tiempo tan grande ? ¿Son "rm" y "delete" comandos tan fundamentalmente diferentes por lo que estoy tratando de comparar manzanas y naranjas?

Jordan Plahn
fuente
1
También es cierto en Windows, presumiblemente por las mismas razones que se detallan a continuación.
Chris H

Respuestas:

38

Como notó correctamente, la GUI hace más que simplemente "eliminar" los archivos.

$ rm -rf 

simplemente se repite en carpetas eliminando los archivos y carpetas que encuentra allí.

La GUI primero escanea todo el árbol para determinar qué hay allí (para saber cuánto tiene que hacer para dibujar la barra bonita), luego vuelve a atravesar el árbol moviendo los archivos desde la ubicación actual a la ubicación del archivo. archivos de papelera para su GUI específica. Ese movimiento lleva más tiempo, ya que primero tiene que generar un nuevo nombre de archivo único, vincular el archivo en la carpeta de la papelera, luego desvincularlo de la carpeta actual y actualizar un índice de dónde provienen los archivos para que puedan "deshacerse". muchas operaciones en lugar de solo una.

Por ejemplo, en Gnome 3 los archivos se mueven a la ubicación:

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

Dónde filenameestá el nombre del archivo original y versiones un número de versión incremental para garantizar que el archivo sea único (la primera instancia de archivo no tiene número de versión). Asociado a eso hay un .trashinfoarchivo almacenado en la carpeta:

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

Este archivo contiene la ruta original del archivo antes de la eliminación, así como la fecha y hora en que se eliminó este archivo.

Todas estas operaciones adicionales, que deben realizarse en todos y cada uno de los archivos individuales del árbol que está eliminando, aseguran que puede restaurar cualquier archivo de la papelera y que puede eliminar archivos del mismo nombre del misma ubicación y aún restaurar versiones anteriores.

Nada de eso se hace con un simple rmo mvcomando.

Majenko
fuente
1
Oye, ¿quién eliminó todos los comentarios? Estábamos descubriendo que esta respuesta podría estar equivocada. Al menos trash-clino parece hacerlo de forma recursiva. Al eliminar una carpeta, ¿Gnome 3 realmente coloca un .trashinfoarchivo recursivamente para cada subcarpeta y todos los archivos que lo contienen?
mb21
¡Supongo que se puso demasiado ruidoso para ellos! ;-)
Jordan Plahn