GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo incluyo una pipa | en mi comando linux find -exec?

El trabajo de interpretar el símbolo de tubería como una instrucción para ejecutar múltiples procesos y canalizar la salida de un proceso a la entrada de otro proceso es responsabilidad del shell (/bin/sh o equivalente).

En su ejemplo, puede elegir usar su shell de nivel superior para realizar la tubería de la siguiente manera:

find -name 'file_*' -follow -type f -exec zcat {} \; | agrep -dEOE 'grep'

En términos de eficiencia, este resultado cuesta una invocación de find, numerosas invocaciones de zcat y una invocación de agrep.

Esto daría como resultado la generación de un único proceso agrep que procesaría toda la salida producida por numerosas invocaciones de zcat.

Si por algún motivo desea invocar agrep varias veces, puede hacerlo:

find . -name 'file_*' -follow -type f \
    -printf "zcat %p | agrep -dEOE 'grep'\n" | sh

Esto construye una lista de comandos usando canalizaciones para ejecutar, luego los envía a un nuevo shell para que realmente se ejecuten. (Omitir el "| sh" final es una buena manera de depurar o realizar ejecuciones en seco de líneas de comando como esta).

En términos de eficiencia, este resultado cuesta una invocación de find, una invocación de sh, numerosas invocaciones de zcat y numerosas invocaciones de agrep.

La solución más eficiente en términos de número de invocaciones de comandos es la sugerencia de Paul Tomblin:

find . -name "file_*" -follow -type f -print0 | xargs -0 zcat | agrep -dEOE 'grep'

... lo que cuesta una invocación de find, una invocación de xargs, algunas invocaciones de zcat y una invocación de agrep.


la solución es fácil:ejecutar a través de sh

... -exec sh -c "zcat {} | agrep -dEOE 'grep' " \;

Linux
  1. Cómo encontrar conexiones SSH activas en Linux

  2. Cómo averiguar qué hace un comando de Linux

  3. Cómo actualizar Kali Linux con un solo comando

  4. Cómo canalizar los resultados de 'buscar' a mv en Linux

  5. ¿Cómo puedo encontrar mi versión de shell usando un comando de Linux?

Cómo encontrar la dirección IP en Linux

Cómo encontrar el nombre de host en Linux

Cómo ejecutar múltiples comandos de Linux en un solo comando

Cómo encontrar archivos con el comando fd en Linux

Cómo encontrar la dirección IP en la línea de comandos de Linux

Cómo encontrar carpetas en Linux