xargs

Da Wikipedia, l'enciclopedia libera.

xargs è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX[1], che esegue un altro comando specificandogli come parametri i dati letti dallo standard input: ciascuna linea letta costituisce una serie di uno o più parametri separati da spazi. È possibile specificare un parametro contenente spazi racchiudendolo tra apici o tra virgolette doppie, oppure precedendo ciascuno spazio da una barra inversa, ed è possibile indicare parametri contenenti apici e virgolette doppie facendole precedere da una barra inversa.

xargs è particolarmente utile con comandi che accettano più nomi di file come parametri, ad esempio rm, grep o cat: in questo modo è possibile effettuare elaborazioni su un elenco di file determinato in precedenza e memorizzato in un file di testo, o comunque determinato in maniera non semplice, avendo cura di specificare i nomi usando apici, virgolette doppie o barre inverse ove necessario.

xargs rimedia inoltre alle eventuali limitazioni del sistema sul numero e dimensione massima dei parametri che possono essere specificati ad un comando[2][3], eseguendolo a più riprese in modo da rientrare in tali limiti.

Uso[modifica | modifica wikitesto]

La sintassi generale di xargs è:

xargs [opzioni] [--] [comando [arg1 …] ]

Il parametro facoltativo comando indica il comando da eseguire, ed i parametri arg i suoi parametri iniziali. Se comando non è specificato, viene usato il comando echo.

Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.

Tra le opzioni principali vi sono:

-t
Scrive la riga di comando completa sullo standard error prima di eseguirla.
-p
Chiede conferma all'utente prima di ogni esecuzione.
-I tag
Esegue il comando una volta per ciascuna linea letta, sostituendo la stringa tag nei parametri arg. Ciò è utile ad esempio per i comandi come mv o cp, dove la destinazione va specificata come ultimo parametro.
-n numero
Esegue il comando (ripetutamente, se necessario) con al massimo il numero specificato di parametri (invece che il massimo consentito dal sistema).
-s dimensione
Esegue il comando (ripetutamente, se necessario) in modo che la dimensione totale in byte d ella riga di comando non superi la dimensione specificata (anziché quella massima consentita dal sistema).

La versione GNU di xargs permette inoltre di specificare un carattere delimitatore specifico per i parametri (ad esempio lo ASCII NUL, 0x00) e nel contempo di non considerare speciali gli apici, le virgolette doppie e le barre inverse, in modo da poter gestire anche parametri che contengono spazi o altri caratteri speciali. Ciò si combina particolarmente bene con l'opzione -print0 della versione GNU del comando find, che separa i nomi dei file appunto con un carattere ASCII NUL.

Esempi[modifica | modifica wikitesto]

Cerca ricorsivamente nella directory corrente (' . ') in tutti gli oggetti di tipo file ('-type f') il cui nome termina con '.c', in genere i file sorgenti del linguaggio C, la stringa foobar ed elenca i nomi dei file che la contengono (posto che i nomi dei file trovati non contengano spazi, apici o virgolette):

find . -type f -name "*.c" -print | xargs grep -l "foobar"

Rimuove i file che non sono stati letti da più di 366 giorni usando la versione GNU di find e xargs, senza chiedere conferma:

find /tmp -type f -atime +366 -print0 | xargs -0 -p rm -f --

Note[modifica | modifica wikitesto]

  1. ^ (EN) xargs in The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato il 18-05-2008.
  2. ^ (EN) ARG_MAX (limits.h) in The Open Group Base Specifications Issue 6IEEE Std 1003.1, 2004 Edition. URL consultato il 19-05-2008.
  3. ^ (EN) Argument list too long in GNU Core Utilities Frequently Asked Questions. URL consultato il 19-05-2008.

Voci correlate[modifica | modifica wikitesto]

  • find (Unix) – Cerca i file e le directory che corrispondono ai criteri di ricerca specificati.

Collegamenti esterni[modifica | modifica wikitesto]

Informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica