xargs -I opzione


12

Il manuale di xargs dice:

-I replace-str
--replace [= replace-str]
-i [replace-str]
Sostituisce le occorrenze di replace-str negli argomenti iniziali con nomi letti dallo standard input.

Non capisco questa parte: with names read from standard input.

Ad esempio cosa sta succedendo con:

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l

Il pezzo di codice sopra riportato conta i file / le directory totali all'interno di una directory.

Qualcuno potrebbe spiegarmelo?

Risposte:


20

"con nomi letti dall'input standard" significa che xargsaccetta i dati che arrivano sul suo input standard, li divide e li usa per eseguire il comando dato nei suoi argomenti. Per impostazione predefinita, si divide in spazi vuoti o newline e viene eseguito echocon il maggior numero di argomenti alla volta.

L' -0opzione nell'esempio indica xargsdi dividere l'input su byte null anziché su spazi vuoti o righe. Combinato con find"s" -print0, questo consente di gestire correttamente i nomi di file contenenti spazi vuoti o nuove righe.

L' -Iopzione cambia il modo in cui sono costruite le nuove linee di comando. Invece di aggiungere quanti più argomenti possibili alla volta, xargsprenderà un nome alla volta dal suo input, cerca il token dato ( {}qui) e sostituiscilo con il nome.

Nel tuo esempio, {}non è presente nel modello di comando fornito xargs, quindi in effetti xargsviene eseguito per eseguire echosenza argomenti, una volta per ogni nome file assegnato da find. Per vedere questo, rilasciare il wc:

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo

Vedrai una serie di righe vuote ... Confronta con

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}

e

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo

e

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0

per capire meglio.

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.