rm -fr não funciona

4

Eu tenho um diretório que foi gerado por engano por um aplicativo e esse diretório tem uma estrutura que envolve mais de 2000 diretórios, um dentro do outro, algo como:

Diretório aaaa inside bob inside ccc inside ddd inside eee etc. Esses são 1000 níveis de profundidade e muitos desses diretórios têm nomes onde os espaços são codificados em URL (espaços são %20 e > são %3E etc).

Se eu tentar remover esse diretório usando rm -fr , recebo a mensagem directory is not empty . Eu acho que a string necessária para remover um diretório é muito longa para o UNIX. Existe uma maneira de excluir este diretório com rm ?

Estou no Mac OS X Mountain Lion.

    
por SpaceDog 13.01.2013 / 22:04

2 respostas

4

Se você usa rm -rf stuff_to_delete com uma estrutura muito profunda, é possível que haja muitos diretórios para o rm manipular.

Você pode contornar isso com:

find /starting/path/to/delete/from -type d -delete

ou com

find -type d /starting/path/to/delete/from -exec rm -f {} \;

O primeiro deve funcionar. O segundo comando inicia um novo comando (rm) para cada diretório, mas isso permite usar o sinalizador de força de rm . Presumo que não seja necessário, e espero que o primeiro comando seja mais rápido.

Independentemente do comando usado, tente primeiro com -print para garantir que seu caminho esteja correto.

    
por 13.01.2013 / 23:31
0

Eu tenho observado falhas do "sudo rm -fr" no meu laptop MacOSX 10.8 regularmente. No último caso, o diretório que eu estava excluindo continha ~ 28.000 arquivos em uma hierarquia de diretórios que tinha talvez 8 ou 10 níveis de profundidade, no máximo; o tamanho total foi de cerca de 4 GB no disco. Simplesmente executar "sudo rm -fr" uma segunda vez removeu os arquivos restantes, como sempre tem para mim.

Não me parece que o problema seja a profundidade da hierarquia de diretórios, porque os arquivos não excluídos sempre parecem estar perto do topo da árvore de diretórios. É difícil acreditar que possa ter algo a ver com o número total de arquivos ou diretórios, porque eu esperaria que 'rm' excluísse esses diretórios de forma recursiva.

    
por 03.05.2013 / 01:20