In generale, xargsviene utilizzato per i casi in cui è possibile reindirizzare (con il simbolo |) qualcosa da un comando all'altro ( Command1 | Command2), ma l'output del primo comando non viene ricevuto correttamente come input per il secondo comando.
Ciò si verifica in genere quando il secondo comando non gestisce correttamente l'immissione dei dati tramite Standard In (stdin) (ad esempio: più linee come input, il modo in cui le linee sono impostate, i caratteri utilizzati come input, più parametri come input, il tipo di dati ricevuto come input, ecc.). Per darti un rapido esempio, prova quanto segue:
Esempio 1:
ls | echo- Questo non farà nulla poiché echonon sa come gestire l'input che sta ricevendo. Ora in questo caso, se lo utilizziamo xargs, elaborerà l'input in un modo che può essere gestito correttamente da echo(ad esempio: come una singola riga di informazioni)
ls | xargs echo- Questo produrrà tutte le informazioni da lsun'unica riga
Esempio 2:
Diciamo che ho più file goLang in una cartella chiamata go. Vorrei cercarli con qualcosa del genere:
find go -name *.go -type f | echo- Ma se il simbolo del tubo lì e echoalla fine, non funzionerebbe.
find go -name *.go -type f | xargs echo- Qui funzionerebbe grazie a xargsma se volessi ogni risposta dal findcomando in una sola riga, farei quanto segue:
find go -name *.go -type f | xargs -0 echo- In questo caso, lo stesso output findverrà mostrato da echo.
Comandi come cp, echo, rm, lesse altri che necessitano di un modo migliore per gestire l'input ottengono un vantaggio se usati con xargs.