unix find exec pipe

unix - Cómo usar pipe dentro de-exec en find



(2)

Esto no responde directamente a su pregunta, pero si desea realizar algunas operaciones complejas, es mejor que haga una secuencia de comandos:

for file in $(find /path/to/dir -type f); do echo ${file}; cat $file | head -1 | grep yourstring; done

¿Hay alguna forma de usar pipe dentro de un -exec en find? No quiero que grep pase por todo el archivo, sino solo por la primera línea de cada archivo.

find /path/to/dir -type f -print -exec grep yourstring {} /;

Intenté colocar las tuberías allí con "cat" y "head -1", pero no funcionó muy bien. Intenté usar paréntesis de alguna manera, pero no logré averiguar cómo colocarlos exactamente allí. Estaría muy agradecido por su ayuda. Sé cómo hacerlo de otra manera, sin usar el hallazgo, pero intentamos hacerlo en la escuela con el uso de buscar y canalizar, pero no pudimos administrar cómo hacerlo.

find /path/to/dir -type f -print -exec cat {} | head -1 | grep yourstring /;

Así es como intentamos hacerlo, pero no pudimos manejar el paréntesis y si es posible. Intenté mirar a través de la red, pero no pude encontrar ninguna respuesta.


Para poder utilizar una canalización, debe ejecutar un comando de shell , es decir, el comando con la canalización debe ser un solo comando para -exec .

find /path/to/dir -type f -print -exec sh -c "cat {} | head -1 | grep yourstring" /;

Tenga en cuenta que lo anterior es un uso inútil de Cat , que podría escribirse como:

find /path/to/dir -type f -print -exec sh -c "head -1 {} | grep yourstring" /;

Otra forma de lograr lo que quieres es decir:

find /path/to/dir -type f -print -exec awk ''NR==1 && /yourstring/'' {} /;