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 è:
Puoi anche modificare il comportamento di xargs con alcune opzioni. In tal caso, il formato del comando xargs sarà:
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:
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 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.
Ora puoi creare tutti i file elencati nel file di testo files.txt utilizzando il comando touch con xargs come segue:
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:
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.
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.
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.
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.
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,
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:
Allo stesso modo, puoi anteporre la stringa ciao (diciamo) a ciascun argomento come segue:
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:
Come puoi vedere, tutta l'estensione del file è cambiata in png.
Qui, xargs avvia una sub shell bash ed esegue il comando bash
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:
Quindi, è così che usi xargs su Linux. Grazie per aver letto questo articolo.