Seguindo a consulta anterior postada Usando find com sh - comando não funciona
find . -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \; -ls
Este cmd não conseguiu encontrar os arquivos quando o texto “archive” ou “chmod” foi encontrado em várias linhas. No entanto, ele é capaz de verificar os arquivos, quando o texto "chmod" e "archive" é encontrado na mesma linha.
Então tentei com este comando, mas não dá o o/p desejado
1> find . -type f -name '*FW*' -exec grep -iEq 'chmod.*' {} \; -ls -exec grep -iEq '.*archive.*' {} +
Por que este cmd não fornece o o/p desejado?
Tentei com este comando, ele dá o resultado esperado, mas falha intermitentemente com este erro "find: 'pcregrep' terminado pelo sinal 11'
2> find . -type f -name '*FW*' -exec pcregrep -qM 'chmod.*(\n|.)*archive.*' {} \; -ls
Por que está falhando com o erro?
Responder1
Seu segundo comando na pergunta não está fornecendo a saída correta porque a ordem dos testes que você usa find
é importante. O comando só produzirá resultados para arquivos que contenham a chmod
string porque o outro grep
comando é executadodepois -ls
(e não produz saída).
Você deseja encontrar arquivos que contenham strings chmod
e archive
.
find . -type f -name '*FW*' \
-exec grep -Fiq chmod {} \; \
-exec grep -Fiq archive {} \; -ls
Isso chama grep -Fiq chmod
todos os arquivos que possuem FW
em seu nome e, em seguida, grep -Fiq archive
aqueles em que o primeiro grep
encontrou uma correspondência. Se o segundo grep
também encontrou algo, o -ls
comando entra em vigor.