
Conheço um comando que uso com frequência quando trabalho na base de código de outra pessoa. Aqui está um exemplo
find ./ -name "*.php" | xargs grep "my_awesome_function("
Já li a documentação de cada um dos comandos aqui como find
, e from
pipe
xargs
grep
http://www.computerhope.com/unix.htm
No entanto, ainda não entendo completamente como esse comando procura cada arquivo php do diretório atual para baixo e depois procura qual deles contém uma string "my_awesome_function (". Eu entendo como a parte pré-pipe funciona, mas depois do pipe meu entendimento desaparece Entendo que cada arquivo é enviado como um argumento para o comando grep, alguém pode explicar o que está acontecendo aqui?
Responder1
Tente executar o find
comando sem a última parte:
find ./ -name "*.php"
O que você verá é uma lista de nomes de arquivos, todos terminando com .php
.
Agora o xarg
comando lê todos esses nomes de arquivos do pipe, pega vários deles (você pode definir quantos usando option -n 2
) e então chama seu argumento com esses nomes. Portanto, se a saída de find for file1.php file2.php file3.php
e xarg
agrupar no máximo dois arquivos (ou você forçar isso com xargs -n 2
), ele chamará
grep "my_awesome_function(" file1.php file2.php
grep "my_awesome_function(" file3.php
que por sua vez produz sua saída. Você pode ver o que realmente está acontecendo inserindo um echo
:
find ./ -name "*.php" | xargs echo grep "my_awesome_function("
Brinque também com o agrupamento:
find ./ -name "*.php" | xargs -n 2 echo grep "my_awesome_function("