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:
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!