terminal command separa a funcionalidade

1

Eu conheço um comando que eu uso com bastante frequência quando estou trabalhando na base de código de outra pessoa, aqui está um exemplo

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

Eu já li os documentos sobre cada um dos comandos aqui como find , pipe , xargs e grep de link

No entanto, eu ainda não entendo completamente como esse comando procura por cada arquivo php do diretório atual e então procura quais deles contêm uma string "my_awesome_function (". Eu entendo como a parte pre pipe funciona, mas depois do pipe minha compreensão desaparece.Eu entendo que cada arquivo é enviado como um argumento para o comando grep, alguém pode explicar o que está acontecendo aqui?

    
por AntK 21.10.2016 / 01:16

1 resposta

0

Tente executar o comando find sem a última parte:

find ./ -name "*.php"

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

Agora, o comando xarg lê todos esses nomes de arquivo do pipe, pega um monte deles (você pode definir quantos usando a opção -n 2 ) e 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 juntos (ou forçar isso com xargs -n 2 ), ele chamaria

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("

Também brinque com o agrupamento:

find ./ -name "*.php" | xargs -n 2 echo grep "my_awesome_function("
    
por 21.10.2016 / 08:37