comando de terminal separa la funcionalidad

comando de terminal separa la funcionalidad

Conozco un comando que uso con bastante frecuencia cuando trabajo en el código base de otra persona. Aquí hay un ejemplo.

find ./ -name "*.php" | xargs grep "my_awesome_function("

Ya leí los documentos sobre cada uno de los comandos aquí como find, y desde pipexargsgrephttp://www.computerhope.com/unix.htm

Sin embargo, todavía no entiendo del todo cómo este comando busca cada archivo php desde el directorio actual hacia abajo y luego busca cuál de ellos contiene una cadena "my_awesome_function(". Entiendo cómo funciona la parte previa a la tubería, pero después de la tubería mi comprensión desaparece Entiendo que cada archivo se envía como un argumento para el comando grep, ¿alguien puede explicar qué está sucediendo aquí?

Respuesta1

Intente ejecutar el findcomando sin la última parte:

find ./ -name "*.php"

Lo que verá es una lista de nombres de archivos, todos terminados en .php.

Ahora el xargcomando lee todos estos nombres de archivos de la canalización, toma varios de ellos (puede configurar cuántos usando la opción -n 2) y luego llama a su argumento con estos nombres. Entonces, si la salida de find es file1.php file2.php file3.phpy xargagruparía como máximo dos archivos (o lo obligaría a hacerlo con xargs -n 2), entonces llamaría

grep "my_awesome_function(" file1.php file2.php
grep "my_awesome_function(" file3.php

lo que a su vez produce su resultado. Puedes ver lo que realmente está pasando insertando un echo:

find ./ -name "*.php" | xargs echo grep "my_awesome_function("

Juega también con la agrupación:

find ./ -name "*.php" | xargs -n 2 echo grep "my_awesome_function("

información relacionada