O que os xargs fazem exatamente nesse caso?

0

Eu encontrei recentemente os dois exemplos a seguir

Exemplo 1: Listar Apenas Diretórios

ls -l | grep "^d"

Exemplo 2: Pesquisar arquivos internos

   ls | xargs grep -i "Find Some String"

Agora eu li daqui que

Se você usa apenas um pipe, ele recebe dados em STDIN (o fluxo de entrada padrão) como uma pilha de dados que pode ser classificada em uma linha por vez.

Então agora estou um pouco confuso sobre por que o grep requer xargs no segundo e não no primeiro. Pelo que entendi até agora é que xargs é usado para converter stdinem arguments. (Desde que alguns programas requerem argumentos em vez de stdin). Isso significa que o grep pode pegar tanto stdin quanto argumentos? Eu apreciaria se alguém pudesse explicar por que os xargs são usados ​​no segundo exemplo porque não funcionam sem xargs? Com qual finalidade ele está servindo?

Rajeshwar
fonte

Respostas:

1

No exemplo 2, você está procurando por um determinado texto no file contents, então você precisa de xargs para passar os nomes dos arquivos para o grep.
No exemplo 1, você está pesquisando a saída de ls, não o conteúdo do arquivo.

Na verdade, você pode pesquisar o conteúdo do arquivo sem usar xargs, o que é melhor:

grep -i 'some text' *
David Dai
fonte
Acabei de atualizar minha pergunta. Você poderia gentilmente adicionar um pouco mais de detalhes. Obrigado por explicar.
Rajeshwar
você poderia me dizer o que xargs está fazendo? Converte stdout em argumentos?
Rajeshwar
sim, é isso que o xargs faz, converte stdout em argumentos. no seu exemplo, o ls imprime os nomes dos arquivos e o grep precisa dos nomes dos arquivos como argumentos (não stdin), ou seja, quando o xargs entra em ação. Você precisa entender que o grep pode trabalhar tanto em arquivos stdin quanto em arquivos.
David Dai
então o grep basicamente aceita parâmetros como stdin e também como parâmetros. Se seus parâmetros, em seguida, o grep espera que esses sejam nomes de arquivos, está correto?
Rajeshwar
Sim, o grep espera seus argumentos como nomes de arquivos e espera stdin como o conteúdo para trabalhar.
David Dai