Cosa fa esattamente xargs in questo caso?


0

Di recente mi sono imbattuto nei seguenti due esempi

Esempio 1: elenca solo le directory

ls -l | grep "^d"

Esempio 2: ricerca all'interno dei file

   ls | xargs grep -i "Find Some String"

Ora ho letto da qui che

Se si utilizza semplicemente una pipe, riceve i dati su STDIN (il flusso di input standard) come una pila di dati grezzi che può ordinare su una riga alla volta.

Quindi ora sono un po 'confuso sul perché grep richiede xargs nel secondo e non nel primo. Da quello che ho capito finora è che xargs viene utilizzato per la conversione stdinin arguments. (Poiché alcuni programmi richiedono argomenti anziché stdin). Questo significa che grep può accettare sia lo stdin che gli argomenti? Gradirei se qualcuno potesse spiegare perché nel secondo esempio viene utilizzato xargs perché non può funzionare senza xargs? A che serve?

Risposte:


1

Nell'esempio 2, stai cercando un determinato testo in file contents, quindi hai bisogno di xargs per passare i nomi dei file a grep.
Nell'esempio 1, stai cercando l'output di ls, non il contenuto del file.

in realtà, puoi cercare il contenuto del file senza usare xargs, il che è meglio:

grep -i 'some text' *

Ho appena aggiornato la mia domanda. Potresti gentilmente aggiungere qualche dettaglio in più. Grazie per aver spiegato.
Rajeshwar,

potresti dirmi cosa sta facendo xargs? Converte stdout in argomenti?
Rajeshwar,

sì, è quello che fa xargs, converti stdout in argomenti. nel tuo esempio, ls stampa i nomi dei file e grep ha bisogno dei nomi dei file come argomenti (non stdin), è allora che entra in gioco xargs. Devi capire che grep può funzionare sia su stdin che sui file.
David Dai,

quindi grep accetta fondamentalmente parametri come stdin e anche come parametri. Se i suoi parametri quindi grep si aspetta che siano nomi di file, è corretto?
Rajeshwar,

sì, grep si aspetta che i suoi argomenti siano nomi di file e si aspetta che stdin funzioni come contenuto.
David Dai,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.