dando saída grep para rm

36

Estou tentando canalizar grep de saída para rm , mas produz itens inúteis. Existe algum comutador necessário para rm ? Ou pode rm pode ser fornecido um regexp diretamente?

ls | grep '^\[Daruchini'| rm

rm: operando ausente Tente 'rm --help' para mais informações.

    
por CodeBladeRunner 18.03.2011 / 22:29

4 respostas

47

Você precisa usar xargs para transformar a entrada padrão em argumentos para rm .

$ ls | grep '^Dar' | xargs rm

(Cuidado com caracteres especiais em nomes de arquivos; com o GNU grep, você pode preferir

$ ls | grep -Z '^Dar' | xargs -0 rm

Além disso, embora o shell não use regexps, esse é um padrão simples:

$ rm Dar*

(enquanto isso, eu acho que preciso dormir mais.)

    
por 18.03.2011 / 22:45
4

Não analise a saída de ls .

Aqui, é muito simples obter o shell para filtrar os arquivos desejados. Note que é o shell que está expandindo o padrão Dar* , não o comando rm . A expansão do padrão executada pelo shell é chamada de globbing .

rm Dar*

Em casos mais complexos, procure o comando find .

    
por 18.03.2011 / 22:53
2

Para passar a saída como um argumento, costumo usar um loop while, já que não estou familiarizado com xargs.

ls | grep '^Dar' | while read line; do rm "$line";done;
    
por 30.09.2016 / 08:31
2

Se você quiser delimitar a saída de grep por novas linhas em vez de espaço em branco, poderá especificar isso para xargs por meio da opção -d .

$ ls | grep '^Dar' | xargs -d '\n' rm

(conforme descrito em esta pergunta)

    
por 22.04.2018 / 18:12

Tags