English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Comando xargs di Linux

Linux Command大全

xargs (inglese: eXtended ARGuments) è un filtro per passare parametri ai comandi e uno strumento per combinare più comandi.

xargs può convertire i dati di tubo o stdin in argomenti di riga di comando, e anche leggere i dati dall'output del file.

xargs può anche convertire l'input di testo su una riga o su più righe in altri formati, ad esempio, più righe in una riga, una riga in più righe.

Il comando predefinito di xargs è echo, il che significa che l'input trasmesso a xargs tramite il tubo contiene newline e spazi, ma tramite il processo di xargs, newline e spazi vengono sostituiti dagli spazi.

xargs è un comando potente che può catturare l'output di un comando e trasmetterlo a un altro comando.

La ragione per cui possiamo utilizzare questo comando è principalmente perché molti comandi non supportano il tubo (pipe) per passare parametri, ma c'è bisogno di questo nella vita quotidiana, quindi è stato creato il comando xargs, ad esempio:

find /sbin -perm +700 |ls -l # Questo comando è errato
find /sbin -perm +700 |xargs ls -l # Questo è corretto

xargs viene generalmente utilizzato insieme al tubo (pipe).

Formato del comando:

somecommand |xargs -item command

Parametri:

  • -a file Leggere dal file come stdin

  • -e flag, notare che a volte potrebbe essere -E, flag deve essere un flag separato da spazi, quando xargs analizza un flag contenente flag, interrompe.

  • -p Chiedere all'utente di confermare ogni volta che si esegue un argumento.

  • -n num Aggiungere il numero dietro per indicare il numero di argumenti utilizzati per volta durante l'esecuzione del comando, il valore predefinito è utilizzare tutti gli argumenti.

  • -t Stampa il comando prima di eseguirlo.

  • -i oppure -I, dipende dal supporto di Linux, assegnare ogni nome dell'elemento di xargs, di solito una riga alla volta, a {}, può essere sostituito con {}.

  • -r no-run-if-empty Quando l'input di xargs è vuoto, fermare xargs senza eseguire ulteriori operazioni.

  • -s num il numero massimo di caratteri della riga di comando, si riferisce al numero massimo di caratteri della riga di comando del comando dopo xargs.

  • -L num legge num righe dalla standard input e le invia al comando

  • -l è lo stesso di -L.

  • -d delim delimitatore, il delimitatore predefinito di xargs è il ritorno a capo, il delimitatore degli argomenti è lo spazio, qui si modifica il delimitatore di xargs.

  • -x l'exit significa, principalmente utilizzato con -s...

  • -P modifica il numero massimo di processi, il valore predefinito è 1, 0 significa 'quanti ne posso', questo esempio non l'ho pensato, dovrebbe essere utilizzato di solito, vero?

Esempio online

xargs viene utilizzato come strumento di sostituzione, legge i dati di input, li formatta e li output.

Definire un file di test contenente dati multilinia.

# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

Input multilinea output singola riga:

# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z

L'opzione -n per l'output a multilinea:

# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

L'opzione -d può definire un delimitatore personalizzato:

# echo "nameXnameXnameXname" | xargs -dX
name name name name

Combina l'opzione -n:

# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name

Legge stdin, passing parameteri formattati al comando

Supponiamo un comando sk.sh e un file di salvataggio dei parametri arg.txt:

#!/bin/bash
#sk.sh comando contenente, stampa tutti i parametri.
echo $*

Contenuto del file arg.txt:

# cat arg.txt
aaa
bbb
ccc

Un'opzione di xargs -I, che utilizza -I per specificare una stringa di sostituzione {} che verrà sostituita durante l'estensione di xargs. Quando -I viene utilizzato con xargs, ogni comando parametrizzato viene eseguito una volta:

# cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l

Copy all image files to the /data/images directory:

ls *.jpg | xargs -n1 -I {} cp {} /data/images

xargs combined with find usage

When you delete too many files with rm, you may get an error message:/bin/rm Argument list too long. Use xargs to avoid this problem:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 uses \0 as delimiter.

Count the number of lines in all php files in a source code directory:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

Find all jpg files and compress them:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

Other Applications of xargs

If you have a file that contains many URLs you want to download, you can use xargs to download all links:

# cat url-list.txt | xargs wget -c

Linux Command大全