Il xargs
l'utilità consente di creare ed eseguire comandi dallo standard input. Di solito viene utilizzato in combinazione con altri comandi tramite piping.
Con xargs
, puoi fornire un input standard come argomento alle utilità della riga di comando come mkdir
e rm
.
In questo tutorial, tratteremo le basi dell'utilizzo di xargs
comando.
Come usare Linux xargs
Comando #
xargs
legge gli argomenti dallo standard input, separati da spazi vuoti o nuove righe, ed esegue il comando specificato utilizzando l'input come argomenti del comando. Se non viene fornito alcun comando, l'impostazione predefinita è /bin/echo
.
La sintassi per xargs
il comando è il seguente:
xargs [OPTIONS] [COMMAND [initial-arguments]]
L'esempio più semplice di utilizzo di xargs
sarebbe passare diverse stringhe separate da spazi bianchi usando una pipe a xargs
ed esegui un comando che utilizzerà quelle stringhe come argomenti.
echo "file1 file2 file3" | xargs touch
Nell'esempio sopra, stiamo reindirizzando l'input standard a xargs
e il touch
il comando viene eseguito per ogni argomento, creando tre file. È come se eseguissi:
touch file1 file2 file3
Come visualizzare il comando e richiedere all'utente #
Per stampare il comando sul terminale prima di eseguirlo utilizzare il -t
(--verbose
) opzione:
echo "file1 file2 file3" | xargs -t touch
touch file1 file2 file3
Se vuoi ricevere una richiesta se eseguire ciascun comando prima di eseguirlo, usa il -p
(--interactive
) opzione:
echo "file1 file2 file3" | xargs -p touch
Digita y
o Y
per confermare ed eseguire il comando:
touch file1 file2 file3 ?...y
Questa opzione è utile quando si eseguono comandi distruttivi.
Come limitare il numero di argomenti #
Per impostazione predefinita, il numero di argomenti passati al comando è determinato dal limite del sistema.
Il -n
(--max-args
) l'opzione specifica il numero di argomenti da passare al comando dato. xargs
esegue il comando specificato tutte le volte necessarie fino all'esaurimento di tutti gli argomenti.
Nell'esempio seguente, il numero di argomenti letti dallo standard input è limitato a 1.
echo "file1 file2 file3" | xargs -n 1 -t touch
Come puoi vedere dall'output dettagliato di seguito, il comando touch viene eseguito separatamente per ogni argomento:
touch file1
touch file2
touch file3
Come eseguire più comandi #
Per eseguire più comandi con xargs
, usa il -I
opzione. Funziona definendo un replace-str
dopo il -I
opzione e tutte le occorrenze di replace-str
vengono sostituiti con l'argomento passato a xargs.
Il seguente xargs
example eseguirà due comandi, prima creerà i file usando touch
, quindi elencherà i file con ls
comando:
echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file2
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file3
Una scelta comune per replace-str
è %
. Tuttavia, puoi utilizzare un altro segnaposto, ad esempio ARGS
:
echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'
Come specificare un delimitatore #
Usa -d
(--delimiter
) opzione per impostare un delimitatore personalizzato, che può essere un singolo carattere o una sequenza di escape che inizia con \
.
Nell'esempio seguente stiamo usando ;
come delimitatore:
echo "file1;file2;file3" | xargs -d \; -t touch
touch file1 file2 file3
Come leggere gli elementi dal file n.
Il comando xargs può anche leggere gli elementi da un file invece dello standard input. Per farlo, usa il -a
(--arg-file
) seguita dal nome del file.
Nell'esempio seguente, xargs
il comando leggerà il ips.txt
file ed esegui il ping di ogni indirizzo IP.
8.8.8.8
1.1.1.1
Stiamo anche usando il -L 1
opzione, che indica xargs
per leggere una riga alla volta. Se questa opzione viene omessa xargs
passerà tutti gli IP a un singolo ping
comando.
xargs -t -L 1 -a ips.txt ping -c 1
ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms
...
ping -c 1 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms
Utilizzo di xargs
con find
#
xargs
è più spesso usato in combinazione con find
comando. Puoi usare find
per cercare file specifici e quindi utilizzare xargs
per eseguire operazioni su quei file.
Per evitare problemi con i nomi dei file che contengono nuove righe o altri caratteri speciali, usa sempre trova -print0
opzione, che causa find
per stampare il nome completo del file seguito da un carattere nullo. Questo output può essere interpretato correttamente da xargs
usando il -0
, (--null
) opzione.
Nell'esempio seguente, find
stamperà i nomi completi di tutti i file all'interno di /var/www/.cache
directory e xargs
passerà i percorsi dei file a rm
comando:
find /var/www/.cache -type f -print0 | xargs -0 rm -f
Utilizzo di xargs per tagliare i caratteri degli spazi bianchi #
xargs
può anche essere usato come strumento per rimuovere gli spazi bianchi da entrambi i lati di una determinata stringa. Basta reindirizzare la stringa a xargs
comando, e farà il taglio:
echo " Long line " | xargs
Long line
Questo può essere utile quando si confrontano stringhe negli script di shell.
#!/bin/bash
VAR1=" Linuxize "
VAR2="Linuxize"
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
## Using xargs to trim VAR1
if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
Strings are not equal.
Strings are equal.
Conclusione #
xargs
è un'utilità della riga di comando su Linux che consente di creare ed eseguire comandi.
Per informazioni più dettagliate su ogni xargs
opzione, leggi la manpage di xargs.
Se hai domande o feedback, sentiti libero di lasciare un commento.