comando de terminal separa a funcionalidade

comando de terminal separa a funcionalidade

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 pipexargsgrephttp://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 findcomando sem a última parte:

find ./ -name "*.php"

O que você verá é uma lista de nomes de arquivos, todos terminando com .php.

Agora o xargcomando 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.phpe xargagrupar 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("

informação relacionada