Como posso excluir uma pasta com muitas subpastas rapidamente?

15

Eu tenho uma pasta com 266778 subpastas. Como posso deletar?

Eu tentei

cd ~/.local/share/Trash/
sudo rm -rf *

mas demora muito tempo. Após 1 minuto e 25 segundos em tempo real e 0,072 segundos de tempo do usuário, ele excluiu apenas 2500 pastas. Dessa forma, levará mais de duas horas para excluir essa pasta.

Existe uma maneira mais rápida de excluir esta pasta? Por que existe uma diferença tão grande entre o tempo do usuário e o tempo real?

real    1m25.474s
user    0m0.072s
sys     0m28.142s

Eu uso o Linux 2.6.32 (Ubuntu 10.04.4 LTS).

    
por Martin Thoma 04.03.2013 / 12:08

4 respostas

17

Se a sua versão de "find" implementar o subcomando -delete, você poderá tentar

find directory -delete

Neste caso:

find ~/.local/share/Trash/ -delete

Alguns comandos, como o rm, executam a maior parte do trabalho no kernel. Nas rotinas do sistema de arquivos, para ser exato. O tempo gasto na execução de chamadas do sistema é contabilizado dessa forma, portanto, embora o comando "rm" seja executado por um longo período, ele não funciona muito no campo do usuário - as chamadas do sistema executam a maior parte do trabalho.

    
por 04.03.2013 / 13:48
20

Depende da sua definição de rápido . As respostas já aqui dão uma boa solução para remover os diretórios do sistema de arquivos, mas se o que você realmente precisa é liberar o diretório nome o mais rápido possível, uma renomeação no mesmo sistema de arquivos é instantânea:

{ mv directory directory.gone && rm -rf directory.gone; } &

Tecnicamente, isso é uma trapaça, já que eu não acelerei a exclusão, mas praticamente é muito útil: eu uso esse truque o tempo todo, então não preciso esperar por operações de exclusão lenta.

    
por 04.03.2013 / 14:32
1

rm -rf directory ou rm -rf * é o método mais rápido, a menos que sua implementação rm local seja interrompida.

Usar find não oferece vantagens.

Se isso é rápido ou lento, depende principalmente do sistema de arquivos e da implementação do sistema operacional. Então a questão parece ser inadequada.

O UFS eo ZFS no Solaris são conhecidos por serem muito rápidos com esse tipo de tarefa, pois as implementações do sistema de arquivos incluem código de exclusão em segundo plano atrasado que faz com que as chamadas unlink() e rmdir() retornem rapidamente mesmo quando o objeto relacionado demora mais tempo no total.

Com a exclusão de segundo plano atrasada no kernel, as atualizações de diretório também podem ser feitas rapidamente e isso ajuda a acelerar toda a operação.

    
por 18.04.2016 / 18:58
0

Esta é apenas uma resposta parcial, iluminando os três valores que o comando retorna; citado da time(1) manpage :

(i) the elapsed real time between invocation and termination, (ii) the user CPU time (the sum of the tms_utime and tms_cutime values in a struct tms as returned by times(2)), and (iii) the system CPU time (the sum of the tms_stime and tms_cstime values in a struct tms as returned by times(2))."

    
por 04.03.2013 / 12:25