Piping encontra resultados em outro comando

1

Estou tentando verificar um sistema de arquivos em busca de arquivos que correspondam a palavras-chave específicas e, em seguida, removê-los. Eu tenho isso até agora:

find . -iregex '.*.new.*' -regex '.*.pdf*'

Como eu canalizo o resultado desse comando para um comando remove (como rm )

    
por uhhhhhhhhhh_ 22.06.2017 / 02:08

1 resposta

1

Uma maneira é expandir a lista de arquivos e atribuí-la a rm como argumentos:

$ rm $(find . -iregex '.*.new.*' -regex '.*.pdf*')

** Isso falhará com nomes de arquivos que tenham espaços ou novas linhas.

Você pode usar o xargs para construir o comando rm, assim:

$ find . … … | xargs rm

** Também falhará em novas linhas ou espaços

Ou melhor, peça ao find para executar o comando rm:

$ find . … … --exec rm {} \;

Mas a melhor solução é usar a opção delete diretamente em find:

$ find . -iregex '.*.new.*' -regex '.*.pdf*' -delete
    
por 22.06.2017 / 04:24