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.

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 della 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.

A partire dalla directory corrente (' . ') cerca in modo ricorsivo in tutti gli oggetti di tipo file ('-type f') il cui nome termina con '.c' (in genere i file sorgenti del linguaggio C) ed elenca i nomi dei file che contengono la stringa foobar (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, chiedendo conferma:

find /tmp -type f -atime +366 -print0 | xargs -0 -p rm -f -- 
  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]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica