apaga múltiplos arquivos no linux com espaços em nomes de arquivos

1

Eu tenho um diretório na minha caixa Linux com mais de 10000 arquivos que eu tenho que excluir. Correndo ...

sudo rm -rf /var/tmp/*

Dá a mensagem de erro ...

sudo: unable to execute /bin/rm: Argument list too long

A solução para isso é executar

sudo find /var/tmp | xargs sudo rm

Isso só funciona para arquivos sem espaços no nome do arquivo. No entanto, alguns dos arquivos têm nomes com espaços e não são excluídos. Por exemplo, se um arquivo é chamado 'Um arquivo com espaços no Name.dat', a execução do comando me dá erros como este ....

rm: cannot remove '/var/tmp/A': No such file or directory
rm: cannot remove 'File': No such file or directory
rm: cannot remove 'With': No such file or directory
rm: cannot remove 'Spaces': No such file or directory
rm: cannot remove 'in': No such file or directory
rm: cannot remove 'the': No such file or directory
rm: cannot remove 'Name.dat': No such file or directory

Como faço para passar o caminho completo do arquivo para xargs sudo rm sem dividir o nome do arquivo.

    
por b10hazard 20.06.2012 / 20:30

2 respostas

6

Diga a find e xargs para usar um separador de arquivos diferente:

find /var/tmp -print0 | sudo xargs -0 rm

Ou diga find para executar rm diretamente:

sudo find /var/tmp -exec rm {} +

Ou diga find para excluir apenas os arquivos:

sudo find /var/tmp -delete

Nota: -mindepth 1 pode ser útil, para evitar a exclusão do próprio diretório /var/tmp .

... ou realmente, basta soltar o * , não é necessário se você vai usar o modo recursivo em primeiro lugar.

sudo rm -rf /var/tmp
    
por 20.06.2012 / 20:38
1

Apenas para adicionar à resposta anterior para evitar problemas com a exclusão de diretórios:

find /var/tmp -type f -exec sudo rm {} +

find /var/tmp -depth -type d -exec sudo rmdir {} +

rmdir -p também pode ser usado para remover todos os descendentes de um diretório em vez de usar -depth.

    
por 20.06.2012 / 20:46

Tags