Comando Linux para remover diretórios com espaços em branco

1

Eu costumo usar a linha de comando abaixo para remover diretórios no sistema de arquivos. Mas, pela primeira vez, find está retornando nomes com espaços em branco e rm não reconhece.

find . -name .AppleDouble* -exec rm -rf {} \;

Ele gera o seguinte erro: find: './Aerosmith/Young Lust/.AppleDouble': No such file or directory

É possível alcançá-lo usando apenas uma única linha como esta? Ou devo usar algum tipo de script? Se o script é a solução, por favor, você poderia postar um exemplo?

    
por Bob Rivers 03.05.2012 / 00:20

2 respostas

3

Você quer

find <whatever> -print0 | xargs -0 rm -rf
    
por 03.05.2012 / 00:25
2

Ao contrário do que as pessoas vão assumir primeiro é o problema, o problema que você está tendo não é com os espaços no nome do arquivo. {} passará corretamente o nome do arquivo para rm. O problema que você está tendo é que find , por padrão, é bredth first, não depth first. find não tem idéia do que o comando rm está fazendo, então depois de você rm , find está tentando cd no diretório que você acabou de remover, e você recebe um erro de arquivo não encontrado, porque o diretório tenta para o cd se foi.

@ resposta da womble funciona porque atrasa a remoção do diretório. Ele procurará no diretório por outras coisas para remover do diretório primeiro. Isso não é eficiente, já que é bobagem procurar por arquivos para remover em um diretório se você for remover o diretório inteiro de qualquer maneira.

No GNU find, você pode usar a ação -delete:

find . -name .AppleDouble* -delete

E a localização será inteligente o suficiente para fazer a coisa certa.

find . -name .AppleDouble* -exec rm -rf {} +

(usando + em vez de; para terminar o comando) É equivalente ao comando @ womble usando xargs, ele terá o efeito de ações de buffering até varrer todo o diretório ou ficar sem espaço na linha de comando para rm, mas ele sofrerá com o mesmo problema, pois está procurando, inutilmente, por arquivos a serem removidos, que definitivamente serão removidos de qualquer maneira.

    
por 03.05.2012 / 02:42