
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
pipe
xargs
grep
http://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 find
comando sin la última parte:
find ./ -name "*.php"
Lo que verá es una lista de nombres de archivos, todos terminados en .php
.
Ahora el xarg
comando 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.php
y xarg
agruparí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("