bash - por - comando find linux recursivo
¿Cómo uso un conducto en el parámetro exec para un comando find? (5)
Como esto genera una lista, ¿no lo harías?
find /path/to/jpgs -type f -exec jhead -v {} /; | grep 123
o
find /path/to/jpgs -type f -print -exec jhead -v {} /; | grep 123
Pon tu grep en los resultados del find -exec.
Estoy intentando construir un comando de búsqueda para procesar un grupo de archivos en un directorio usando dos ejecutables diferentes. Desafortunadamente, -exec
en find no permite usar pipe o incluso /|
porque el intérprete de comandos interpreta ese personaje primero.
Aquí es específicamente lo que estoy tratando de hacer (que no funciona porque pipe termina el comando find):
find /path/to/jpgs -type f -exec jhead -v {} | grep 123 /; -print
Un enfoque ligeramente diferente sería usar xargs:
find /path/to/jpgs -type f -print0 | xargs -0 jhead -v | grep 123
que siempre encontré un poco más fácil de entender y de adaptar (los argumentos -print0 y -0 son necesarios para lidiar con los nombres de archivos que contienen espacios en blanco)
Esto podría (no probado) ser más efectivo que usar -exec porque conectará la lista de archivos a xargs y xargs se asegurará de que la línea de comando jhead no sea demasiado larga.
Prueba esto
find /path/to/jpgs -type f -exec sh -c ''jhead -v {} | grep 123'' /; -print
De forma alternativa, puede intentar insertar su declaración ejecutiva dentro de un script sh y luego hacer:
find -exec some_script {} /;
Usar el comando de find
para este tipo de tarea quizás no sea la mejor alternativa. Uso el siguiente comando frecuentemente para encontrar archivos que contienen la información solicitada:
for i in dist/*.jar; do echo ">> $i"; jar -tf "$i" | grep BeanException; done
Con -exec
solo puedes ejecutar un único ejecutable con algunos argumentos, no comandos de shell arbitrarios. Para evitar esto, puede usar sh -c ''<shell command>''
.
Tenga en cuenta que el uso de -exec
es bastante ineficiente. Para cada archivo que se encuentra, el comando debe ejecutarse nuevamente. Sería más eficiente si puedes evitar esto. (Por ejemplo, moviendo el grep
fuera del -exec
o -exec
los resultados de find
to xargs
como lo sugiere Palmin ).