Además de la consulta anterior publicada Usando buscar con sh - el comando no funciona
find . -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \; -ls
Este cmd no pudo encontrar los archivos cuando se encuentra el texto "archivo" o "chmod" en varias líneas. Sin embargo, puede escanear los archivos cuando el texto "chmod" y "archive" se encuentran en la misma línea.
Intenté con este comando, pero no proporciona la operación deseada.
1> find . -type f -name '*FW*' -exec grep -iEq 'chmod.*' {} \; -ls -exec grep -iEq '.*archive.*' {} +
¿Por qué este cmd no proporciona la operación deseada?
Intenté con este comando, da el resultado esperado pero falla intermitentemente con este error "buscar: 'pcregrep' terminado por la señal 11'
2> find . -type f -name '*FW*' -exec pcregrep -qM 'chmod.*(\n|.)*archive.*' {} \; -ls
¿Por qué falla con el error?
Respuesta1
Su segundo comando en la pregunta no le brinda el resultado correcto porque el orden de las pruebas que usa find
es importante. El comando solo generará resultados para los archivos que contienen la cadena porque se ejecuta chmod
el otro comandogrep
después -ls
(y no produce resultados).
Quiere buscar archivos que contengan cadenas chmod
y archive
.
find . -type f -name '*FW*' \
-exec grep -Fiq chmod {} \; \
-exec grep -Fiq archive {} \; -ls
Esto llama grep -Fiq chmod
a todos los archivos que tienen FW
su nombre, y luego grep -Fiq archive
a aquellos en los que el primero grep
encontró una coincidencia. Si el segundo grep
también encontró algo, -ls
surte efecto.