Como executar vários comandos sed em uma lista de arquivos usando a saída find filtrada através de xargs

0

Isso é o que eu tentei:

find . -name *.sv | xargs sed -i -e '<command>' -e '<command>'

Não funciona. Usar exatamente o mesmo comando em cada arquivo ainda funciona.

Obrigado pela ajuda.

    
por Steve nag 05.06.2018 / 20:29

1 resposta

2

Para forçar o xargs a executar somente sed com um único arquivo por vez, use -n 1 com xargs . Você também deve passar os nomes de caminho de find usando -print0 e obter xargs para recebê-los com -0 (se find e xargs oferecer suporte a essas opções não padrão), para que nomes de caminho contendo espaços etc. manuseado corretamente. Você provavelmente também precisa especificar que está procurando arquivos regulares (e não diretórios, etc.) e definitivamente precisa citar esse shell glob (ou pode expandir para qualquer nome de arquivo correspondente no diretório atual):

find . -type f -name '*.sv' -print0 | xargs -0 -n 1 sed -i -e '<command>' -e '<command>'

Ou use apenas find :

find . -type f -name '*.sv' -exec sed -i -e '<command>' -e '<command>' {} ';'

Relacionados:

por 05.06.2018 / 20:47

Tags