Por que a exclusão da linha de comando leva significativamente menos tempo do que a de uma GUI?

26

Algo que imaginei quando estava excluindo uma dúzia de imagens do meu computador: com um comando rápido rm -rf no conteúdo do diretório, todas as imagens foram removidas em um piscar de olhos. Quando eu arrasto a mesma dúzia de imagens para uma lixeira / proibição de reciclagem, às vezes leva 10 segundos ou mais.

Agora, tenho certeza de que parte disso vem da sobrecarga da GUI, e parte disso pode ser o fato de que o arquivo ainda "existe" de alguma forma se for colocado na lixeira, mas existe qualquer outra coisa que considere uma disparidade de tempo tão grande? É "rm" e "delete" exatamente comandos tão diferentes, então estou tentando comparar maçãs e laranjas?

    
por Jordan Plahn 13.06.2014 / 15:53

1 resposta

38

Como você observou, a GUI faz mais do que apenas "excluir" os arquivos.

$ rm -rf 

apenas recorre a pastas excluindo os arquivos e pastas que encontra lá.

A GUI primeiro escaneia toda a árvore para descobrir o que existe lá (então ela sabe o quanto tem que ser feito para desenhar a barra bonita), então ela recursiva através da árvore novamente movendo os arquivos do local atual para o localização dos arquivos da lixeira para sua GUI específica. Esse movimento leva mais tempo, já que primeiro gera um novo nome de arquivo exclusivo, vincula o arquivo na pasta da lixeira, desassocia o arquivo da pasta atual e atualiza um índice de onde os arquivos vieram para serem "desfeitos" - muitas operações em vez de apenas uma.

Por exemplo, no Gnome 3, os arquivos são movidos para o local:

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

Em que filename é o nome do arquivo original e version é um número de versão incremental para garantir que o arquivo seja exclusivo (a primeira instância do arquivo não possui um número de versão). Associado a isso está um arquivo .trashinfo armazenado na pasta:

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

Este arquivo contém o caminho original do arquivo antes da exclusão, assim como a data e a hora em que este arquivo foi excluído.

Todas essas operações extras, que precisam ser executadas em cada arquivo individual na árvore que você está excluindo, garantem que você consiga restaurar qualquer arquivo da lixeira e que você possa excluir os arquivos denominados mesmo da mesma localização e ainda restaurar versões anteriores.

Nada disso é feito com um simples comando rm ou mv .

    
por 13.06.2014 / 15:58