Introduzione
Alcuni comandi Linux accettano input sia dall'input standard (stdin) sia come argomento della riga di comando. Tuttavia, altri sono progettati per accettare l'input solo come argomento. Per poter elaborare l'input standard, quei comandi Linux devono utilizzare il xargs
comando.
In questo tutorial imparerai come usare xargs
di Linux comando per manipolare l'input standard e lavorare con altri comandi.
Prerequisiti
- Un sistema che esegue Linux
- Accesso alla riga di comando
Cos'è il comando xargs?
Il xargs
comando compila ed esegue i comandi forniti tramite lo standard input. Prende l'input e lo converte in un argomento di comando per un altro comando. Questa funzione è particolarmente utile nella gestione dei file, dove xargs
viene utilizzato in combinazione con rm
, cp
, mkdir
e altri comandi simili.
Come utilizzare il comando xargs con esempi
Se utilizzato da solo, xargs
chiede all'utente di inserire una stringa di testo che poi passa a echo
comando.
L'esempio mostra un input di esempio, seguito dall'output di echo
comando.
Combina xargs con trova
Il comando trova spesso precede xargs
in una conduttura. Usalo per fornire un elenco di file per l'ulteriore elaborazione da parte di xargs
. La sintassi è simile a questa:
find [location] -name "[search-term]" -type f | xargs [command]
L'esempio sopra mostra l'utilizzo di find
comando per trovare tutti i file con .sh
estensione. L'elenco dei file viene quindi reindirizzato a xargs
, che utilizza il rm
comando per eliminarli.
Tuttavia, xargs
non include automaticamente i file che contengono spazi vuoti nei loro nomi. Per includere anche questi file, usa il -print0
opzione per find
e il -0
opzione per xargs
:
find [location] -name "[search-term]" -type f -print0 | xargs -0 [command]
rm
ora elimina tutti i file con il .sh
estensione.
Combina xargs con grep
Usa xargs
con il comando grep per cercare una stringa nell'elenco dei file forniti da find
comando.
find . -name '[search-term]' | xargs grep '[string-to-find-in-files]'
L'esempio sopra ha cercato tutti i file con .txt
estensione e li ha inviati a xargs
, che ha quindi eseguito il grep
comando su di loro.
Comandi multipli Xargs
Per eseguire più di un comando con xargs
, usa il -I
opzione. La sintassi è:
[command-providing-input] | xargs -I % sh -c '[command-1] %; [command-2] %'
Nell'esempio, il contenuto di file4.txt
sono stati visualizzati per primi. Quindi mkdir
ha creato una cartella per ogni parola nel file.
Leggi elementi da file
Come accennato in precedenza, xargs
legge lo standard input. Usa il -a
opzione per leggere invece il contenuto di un file.
xargs -a [filename]
Trova e archivia le immagini usando tar
Se utilizzato con il comando tar, xargs
crea un tar.gz
archivia e lo popola con i file forniti da find
comando.
find [location] -name "[search-term]" -type f -print0 | xargs -0 tar -cvzf [tar-gz-archive-name]
Comando di stampa
Per vedere i comandi eseguiti da xargs
nell'output standard, utilizzare il -t
opzione.
[command-providing-input] | xargs -t [command]
Nell'esempio sopra, nota che xargs
eseguito il comando mkdir sull'intera stringa fornita da echo
.
Approva l'esecuzione del comando xargs
Alcuni xargs
le operazioni, come la rimozione di file e cartelle, sono irreversibili. Per controllare l'esecuzione di questi comandi, usa il -p
opzione.
[command-providing-input] | xargs -p [command]
Quando esegui il comando con -p
opzione, xargs
visualizza una riga di conferma prima di eseguirlo. Digita y
per procedere, o n
per annullare l'operazione.
Limite di uscita per riga
A volte è necessario controllare il numero di argomenti xargs
prende allo stesso tempo. Esegui questa azione utilizzando il -n
opzione seguita dal numero di argomenti che stai limitando xargs
a:
[command-providing-input] | xargs -n [number] [command]
Nell'esempio seguente, xargs
prende la stringa da echo
comando e lo divide in tre. Quindi esegue un altro echo
per ciascuna delle parti:
Specifica il delimitatore
Il xargs
predefinito il delimitatore è uno spazio vuoto. Per modificare il delimitatore predefinito, utilizza il -d
comando seguito da un singolo carattere o un carattere di escape come n
(una nuova riga).
[command-providing-input] | xargs -d [new-delimiter] | xargs [command]
Nell'esempio seguente, il xargs
comando indica al sistema di utilizzare *
come delimitatore e applica mkdir
a ciascuno degli argomenti ottenuti.
Elenca tutti gli account utente Linux sul sistema
Usa xargs
per organizzare l'output dei comandi, come cut
. Considera il seguente esempio:
cut -d: -f1 < /etc/passwd | sort | xargs
Il comando cut accede a /etc/passwd
file e utilizza il :
delimitatore per tagliare l'inizio di ogni riga nel file. L'output viene quindi reindirizzato a sort
, che ordina le stringhe ricevute e, infine, in xargs
che li visualizza:
Rimuovi gli spazi vuoti nella stringa
Da xargs
ignora gli spazi vuoti durante la ricerca di argomenti, il comando è utile per rimuovere gli spazi vuoti non necessari dalle stringhe.
echo "[string-with-unnecessary-spaces]" | xargs
Elenca il numero di righe/parole/caratteri in ogni file
Usa xargs
con il comando wc per visualizzare un elenco di file con il conteggio di righe, parole e caratteri.
ls | xargs wc
L'esempio seguente indicava al comando ls di reindirizzare a xargs
solo i file contenenti la parola “esempio”. xargs
quindi applicato wc
a quell'elenco:
Copia file in più directory
Copia i file in più directory utilizzando xargs
comando. La sintassi è semplice:
echo [directory-1] [directory-2] | xargs -n 1 cp -v [filename]
L'echo
comando fornisce i nomi delle directory e xargs
usa il comando cp per copiare il file dato in ciascuna delle directory.