Não consigo rodar a combinação de comandos find, xargs e rm

Boa tarde,

Não estou conseguindo rodar o comando find em conjunto com o xargs. Já executei em uma outra pasta e consegui, mas justo na pasta que eu preciso não. Segue abaixo a saída do comando:


usinagem@pedserver1:/Dados/REDE/USINAGEM$ find . -name “pu*” -type f | xargs rm -fv
rm: opção – ‘s’ inválida
Try ‘rm --help’ for more information.

Alguém poderia me ajudar?
Obrigado!

Qual a saída do find? Provavelmente ele está retornando alguma coisa “a mais” que ao ser passado para rm dá erro (mais ou menos como isso aqui, que não é exatamente o mesmo caso, mas eu chutaria que é algo similar).

Então, mas eu rodei esse comando em outra pasta e consegui. Vou te mandar a saída do find:
image

A saída é grande, essa pasta tem bastante arquivos.

Percebi que o nome de alguns arquivos que estou buscando, que são os que começam com “pu”, possuem espaços. Isso atrapalha a execução do comando?

Espaços podem dar problema, mas acho que o erro seria outro (não consegui reproduzir o problema, mas enfim, acho que pode ser isso). Enfim, você pode contornar a questão dos espaços com:

find . -name "pu*" -type f | xargs -I file rm -fv file

Assim, eu digo para o xargs que file deve ser o nome do arquivo (então no comando rm -fv file ele substitui “file” pelo nome do arquivo e já trata corretamente os espaços).


Outra alternativa é:

find . -name "pu*" -type f -print0 | xargs -0 rm -fv

A opção -print0 imprime os nomes dos arquivos com o NULL CHARACTER entre eles, em vez de imprimir um por linha, como é o normal do find. E a opção -0 faz com que xargs use o NULL CHARACTER como separador. Assim, casos os nomes dos arquivos tenham espaços, new lines , aspas, etc, estes serão interpretados e passados corretamente para rm.

1 curtida

As duas opções deram certo. Muito obrigado!