Usar find com o comando sh não funciona - mais consultas

Usar find com o comando sh não funciona - mais consultas

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 chmodstring porque o outro grepcomando é executadodepois -ls(e não produz saída).

Você deseja encontrar arquivos que contenham strings chmode archive.

find . -type f -name '*FW*' \
    -exec grep -Fiq chmod {} \; \
    -exec grep -Fiq archive {} \; -ls

Isso chama grep -Fiq chmodtodos os arquivos que possuem FWem seu nome e, em seguida, grep -Fiq archiveaqueles em que o primeiro grepencontrou uma correspondência. Se o segundo greptambém encontrou algo, o -lscomando entra em vigor.

informação relacionada