Corrija-o usando -print0
em find
e xargs -0
em xargs
para informar aos dois comandos para usar o caractere NULL como um separador em vez de espaço:
find . -type d -print0 | xargs -0 rm -rf
Aqui está uma boa explicação de por que ele quebra e como essa correção funciona a partir de A Linha de Comando Linux de William E. Shotts Jr .
Lidando com nomes de arquivo engraçados
Sistemas semelhantes a Unix permitem espaços incorporados (e até mesmo novas linhas!) em nomes de arquivos. Isso causa problemas para programas como
xargs
que constroem listas de argumentos para outros programas. A espaço incorporado será tratado como um delimitador, e o resultado comando interpretará cada palavra separada por espaço como uma argumento. Para superar isso, find e xarg permitem o uso opcional de um caractere nulo como separador de argumento. Um caractere nulo é definido em ASCII como o caractere representado pelo número zero (ao contrário para, por exemplo, o caractere de espaço, que é definido em ASCII como caractere representado pelo número 32). O comando find fornece o action -print0, que produz saída separada por nulo, e os xargs comando tem a opção --null, que aceita entrada separada nula. Veja um exemplo:find ~ -iname '*.jpg' -print0 | xargs --null ls -l
Usando essa técnica, podemos garantir que todos os arquivos, mesmo aqueles contendo espaços incorporados em seus nomes, são tratados corretamente.
( -0
é a versão curta da opção --null
)