Eu estou tentando pesquisar um monte de arquivos XML para determinadas seqüências de caracteres, mas não outras seqüências de caracteres e estou tendo problemas para colocar um comando juntos para fazê-lo. Só quero listar os nomes dos arquivos que correspondem aos critérios de inclusão / exclusão. Eu estive tentando:
find . -name *.xml -exec grep -li "string1\|string2" {} \; | xargs grep -Li "string3\|string4"
Mas estou tendo problemas porque os nomes de arquivos retornados de encontrar tem espaços em seus nomes e o segundo grep divide todos em pequenos pedaços e, claro, não encontra tais arquivos. Eu tentei adicionar -0
ao xargs , e remove os erros, mas diz "Nome do arquivo longo demais" e só executa o primeiro grep.
Como faço para ajustar esse comando para que ele funcione corretamente em arquivos com espaços nos nomes?
find . -name "*.xml" -exec grep -liZ "string1\|string2" {} \; | xargs -0 grep -Li "string3\|string4"
(O Z
bandeira para grep
produz terminadores zero em sua lista de resultados, que deve ser compatível com xargs -0
)