xargs
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.
Indice |
Uso [modifica]
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]
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]
- ^ (EN) xargs in The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato in data 18-05-2008.
- ^ (EN) ARG_MAX (limits.h) in The Open Group Base Specifications Issue 6IEEE Std 1003.1, 2004 Edition. URL consultato in data 19-05-2008.
- ^ (EN) Argument list too long in GNU Core Utilities Frequently Asked Questions. URL consultato in data 19-05-2008.
Voci correlate [modifica]
- find (Unix) – Cerca i file e le directory che corrispondono ai criteri di ricerca specificati.
Collegamenti esterni [modifica]
- (EN) Run Commands - Multiple Files in GNU Findutils manual. URL consultato in data 18-05-2008.
- (EN) Invoking xargs in GNU Findutils manual. URL consultato in data 18-05-2008.
|
|