androide

Comando Xargs in Linux

Using xargs in Linux

Using xargs in Linux

Sommario:

Anonim

L'utilità xargs consente di creare ed eseguire comandi dall'input standard. Di solito viene utilizzato in combinazione con altri comandi tramite tubazioni.

Con xargs , è possibile fornire input standard come argomento alle utility della riga di comando come mkdir e rm .

In questo tutorial, tratteremo le basi dell'uso del comando xargs .

Come usare il comando xargs Linux

xargs legge gli argomenti dall'input standard, separato da spazi vuoti o newline, ed esegue il comando specificato usando l'input come argomento del comando. Se non viene fornito alcun comando, il valore predefinito è /bin/echo .

La sintassi per il comando xargs è la seguente:

xargs]

L'esempio più basilare dell'uso di xargs sarebbe passare diverse stringhe separate da spazi bianchi usando una pipe a xargs ed eseguire un comando che userà quelle stringhe come argomenti.

echo "file1 file2 file3" | xargs touch

Nell'esempio sopra, eseguiamo il piping dell'input standard su xargs e il comando touch viene eseguito per ogni argomento, creando tre file. È lo stesso che se avessi eseguito:

touch file1 file2 file3

Come visualizzare il comando e richiedere all'utente

Per stampare il comando sul terminale prima di eseguirlo, utilizzare l'opzione -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

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

L'opzione -n ( --max-args ) 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.

Nel seguente esempio, il numero di argomenti letti dall'input standard è 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 , utilizzare l'opzione -I . Funziona definendo una replace-str dopo l'opzione -I e tutte le occorrenze della replace-str vengono sostituite con l'argomento passato a xargs.

Il seguente esempio di xargs eseguirà due comandi, prima creerà i file usando touch , quindi elencherà i file con il comando ls :

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

Utilizzare l'opzione -d ( --delimiter ) per impostare un delimitatore personalizzato, che può essere un singolo carattere o una sequenza di escape che inizia con \ .

Il seguente esempio che stiamo usando ; come delimitatore:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

Come leggere gli elementi dal file

Il comando xargs può anche leggere elementi da un file anziché dallo standard input. Per fare ciò, usa l'opzione -a ( --arg-file ) seguita dal nome del file.

Nel seguente esempio, il comando xargs leggerà il file ips.txt e ips.txt il ping di ciascun indirizzo IP.

ips.txt

8.8.8.8 1.1.1.1

Stiamo anche usando l'opzione -L 1 , che indica a xargs di leggere una riga alla volta. Se questa opzione viene omessa, xargs passerà tutti gli IP a un singolo comando ping .

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 viene spesso utilizzato in combinazione con il comando find . Puoi usare find per cercare file specifici e quindi usare xargs per eseguire operazioni su quei file.

Per evitare problemi con i nomi di file che contengono newline o altri caratteri speciali, utilizzare sempre l'opzione find -print0 , che consente a find di stampare il nome file completo seguito da un carattere null. Questo output può essere interpretato correttamente da xargs usando l'opzione -0 , ( --null ).

Nel seguente esempio, find stamperà i nomi completi di tutti i file all'interno della directory /var/www/.cache e xargs passerà i percorsi dei file al comando rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Uso di xargs per tagliare i caratteri degli spazi bianchi

xargs può anche essere usato come strumento per rimuovere spazi bianchi da entrambi i lati di una determinata stringa. Basta reindirizzare la stringa al comando xargs , 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]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; 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 ciascuna opzione di xargs , leggi la pagina man di xargs.

terminale xargs