Ricerca nel sito web

Come usare xargs su Linux


xargs è uno strumento da riga di comando. Se vuoi reindirizzare l'output di un comando come argomento di un altro comando, xargs è lo strumento che fa per te. È uno strumento molto utile per fare facilmente molte cose dalla riga di comando. In questo articolo, ti mostrerò come usare xargs su Linux. Quindi iniziamo.

Come funziona xargs:

Il formato in cui usi il comando xargs è:

$ command1 | xargs command2

Puoi anche modificare il comportamento di xargs con alcune opzioni. In tal caso, il formato del comando xargs sarà:

$ command1 | xargs [options] command2

Qui, l'output di command1 verrà utilizzato come argomento di command2. L'output di command1 è suddiviso in molti argomenti da xargs a seconda di un carattere chiamato delimitatore. Quindi, xargs esegue il comando comando2 per ciascuno di questi argomenti e tale argomento viene passato come argomento del comando comando2.

Ad esempio, supponiamo che l'output di command1 sia il seguente:

value1 value2 value3

Diciamo che il carattere delimitatore è lo spazio. Ora, l'output di command1 verrà suddiviso in 3 argomenti, value1, value2 e value3.

Ora xargs esegue il comando command2 per ciascuno dei 3 argomenti una volta.

$ command2 value1
$ command2 value2
$ command2 value3

Qui, valore1, valore2 e valore3 sono gli argomenti analizzati da xargs dall'output del comando command1.

Puoi ottenere lo stesso effetto usando i loop in uno script di shell. Ma xargs è solo un modo più semplice per fare cose senza cicli, specialmente sulla riga di comando.

Per impostazione predefinita, il delimitatore di xargs è il carattere di nuova riga/spazio. Ma puoi cambiare il carattere delimitatore con l'opzione -d o –delimiter di xargs.

Per impostazione predefinita, xargs funziona con un argomento alla volta. Se desideri eseguire il comando command2 con più argomenti dall'output del comando command1, puoi utilizzare -n o –max-args opzione di xargs. A volte, dovrai dire a xargs specificatamente di lavorare con un argomento alla volta con l'opzione -n o –max-args .

Puoi anche aggiungere o anteporre altre stringhe agli argomenti passati al comando command2 utilizzando l'opzione -I di xargs.

Esistono molte altre opzioni di xargs, ma queste 3 sono le più importanti e utili. Quindi, tratterò solo questi 3 argomenti xargs in questo articolo.

Basta chiacchiere. Esaminiamo alcuni esempi.

Esempio 1: creazione e rimozione di file elencati in un file di testo

Supponiamo che tu abbia un elenco di nomi di file in un file di testo files.txt.

Puoi vedere il contenuto del file di testo files.txt come mostrato nello screenshot qui sotto.

$ cat files.txt

Ora puoi creare tutti i file elencati nel file di testo files.txt utilizzando il comando touch con xargs come segue:

$ cat files.txt | xargs touch

Come puoi vedere, i file vengono creati come elencati nel files.txt.

Ora, supponiamo che tu voglia rimuovere i file elencati nel file di testo files.txt. Puoi utilizzare il comando rm con xargs come segue:

$ cat files.txt | xargs rm -v

Vengono rimossi solo i file elencati nel file files.txt, come puoi vedere nello screenshot qui sotto.

Questo è un esempio molto semplice di xargs.

Esempio 2: reindirizzare STDOUT ai comandi che non supportano Pipe

Puoi reindirizzare lo STDOUT di un comando command1 come STDIN di un altro comando command2 se il comando command2 supporta Linux pipe. Ma se il comando non supporta pipe, non sarai in grado di farlo.

Ad esempio, il comando echo non supporta pipe. Pertanto, il seguente comando non stamperà nulla, come puoi vedere nello screenshot qui sotto.

$ date | echo

Il comando xargs può aiutarti a reindirizzare lo STDOUT di command1 (in questo caso date) allo STDIN di command2 (in questo caso echo) come puoi vedere nello screenshot qui sotto.

$ date | xargs echo

Esempio 3: modifica del delimitatore di xargs

Qui ho stampato una stringa 123-456-7890 (un numero di telefono fittizio) utilizzando xargs. Come puoi vedere, l'intero output viene trattato come un singolo argomento e xargs esegue il comando echo solo una volta.

$ echo -n 123-456-7890 | xargs echo

Qui ho cambiato il delimitatore in utilizzando l'opzione -d di xargs. Come puoi vedere, l'output 123-456-7890 viene ora trattato come 3 argomenti diversi 123, 456 e 7890.

$ echo -n "123-456-789" | xargs -n 1 -d - echo

Esempio 4: aggiungere o anteporre argomenti xargs

Puoi aggiungere (aggiungere alla fine dell'argomento) o anteporre (aggiungere all'inizio dell'argomento) una stringa all'argomento passato al comando comando2 utilizzando xargs. Prima di mostrarti come farlo, ti mostrerò come utilizzare l'opzione -I di xargs.

L'opzione -I di xargs ti consente di definire un simbolo per l'argomento xargs che viene passato al comando command2. Funziona proprio come una variabile.

Per esempio,

$ echo -n "123-456-789" | xargs -d - -n 1 -I{} echo {}

Qui, l'opzione -I definisce {} come il simbolo dell'argomento su cui xargs sta attualmente lavorando. Una volta definito il simbolo {}, il simbolo può essere utilizzato per passare l'argomento al comando command2, il quale (il simbolo {}) verrà sostituito dal valore dell'argomento.

Ora, per aggiungere la stringa .txt (diciamo) a ciascun argomento, puoi utilizzare xargs come segue:

$ echo -n "123-456-789" | xargs -d - -n 1 -I{} echo {}.txt

Allo stesso modo, puoi anteporre la stringa ciao (diciamo) a ciascun argomento come segue:

$ echo -n "123-456-789" | xargs -d - -n 1 -I{} echo "hello {}"

Esempio 5: modifica delle estensioni di file specifici

Questo è un po' complicato. Ma ti spiegherò come funziona. Non preoccuparti.

Diciamo che hai alcuni file nella tua directory di lavoro corrente con estensioni di file diverse. Ora vuoi cambiarli tutti nell'estensione png.

Puoi modificare l'estensione di tutti i file nella directory di lavoro corrente in png con xargs come segue:

$ ls | xargs -I{} bash -c 'FILE={} && mv -v $FILE ${FILE%%.*}.png'

Come puoi vedere, tutta l'estensione del file è cambiata in png.

Qui, xargs avvia una sub shell bash ed esegue il comando bash

FILE={} && mv -v $FILE ${FILE%%.*}.png

Innanzitutto, FILE={} assegna il valore del simbolo {}, che è il nome del file (il valore dell'argomento di xargs) alla variabile di shell FILE .

Quindi, il comando mv viene utilizzato per modificare l'estensione del file.

La variabile di shell $FILE contiene il nome del file originale.

$ {FILE%%.*} rimuove l'estensione del nome file (incluso il carattere .) e quindi la stringa .png viene aggiunta al nome file eliminato.

xargs può fare cose molto più complesse. Continua a provare cose nuove con xargs. Il cielo è il tuo limite.

Se hai bisogno di aiuto su xargs, puoi controllare la pagina man di xargs come segue:

$ man xargs

Quindi, è così che usi xargs su Linux. Grazie per aver letto questo articolo.

Articoli correlati: