xargs
e un comando dei
sistemi operativi
Unix
e
Unix-like
, e piu 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 piu parametri separati da spazi. E possibile specificare un parametro contenente spazi racchiudendolo tra apici o tra virgolette doppie, oppure precedendo ciascuno spazio da una barra inversa, ed e possibile indicare parametri contenenti apici e virgolette doppie facendole precedere da una barra inversa.
xargs
e particolarmente utile con comandi che accettano piu nomi di
file
come parametri, ad esempio
rm
,
grep
o
cat
: in questo modo e 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 piu riprese in modo da rientrare in tali limiti.
La sintassi generale di
xargs
e:
xargs [
opzioni
] [--] [
comando
[
arg1
…] ]
Il parametro facoltativo
comando
indica il comando da eseguire, ed i parametri
arg
i suoi parametri iniziali. Se
comando
non e 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
. Cio e 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 (anziche 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. Cio 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 piu 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 --
- ^
(
EN
)
xargs
, in
The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition
.
URL consultato il 18-05-2008
.
- ^
(
EN
)
ARG_MAX (limits.h)
, in
The Open Group Base Specifications Issue 6IEEE Std 1003.1, 2004 Edition
.
URL consultato il 19-05-2008
.
- ^
(
EN
)
Argument list too long
, in
GNU Core Utilities Frequently Asked Questions
.
URL consultato il 19-05-2008
.
- find (Unix)
? Cerca i file e le directory che corrispondono ai criteri di ricerca specificati.