texto recursivo por fecha extension ejemplos consola comando buscar archivos archivo bash shell find

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 ).