Skip to main content

Esempi di utilizzo del comando "xargs"

Linde esempio di sensibilita dei comandi (Aprile 2025)

Linde esempio di sensibilita dei comandi (Aprile 2025)
Anonim

Il comando xargs viene in genere utilizzato in una riga di comando in cui l'output di un comando viene passato come argomento di input a un altro comando.

In molti casi, non è necessario alcun comando speciale come xargs per eseguire tale operazione, poiché gli operatori "pipe" e "redirection" eseguono la stessa transazione di tipo. Tuttavia, a volte esistono problemi con il meccanismo di piping e reindirizzamento di base, ad esempio, se gli argomenti contengono spazi, che xargs supera.

Inoltre, xargs esegue ripetutamente il comando specificato, se necessario, per elaborare tutti gli argomenti ad esso assegnati. In effetti, è possibile specificare quanti argomenti devono essere letti dal flusso di input standard ogni volta che xargs esegue il comando specificato.

In generale, il comando xargs dovrebbe essere usato se l'output di un comando deve essere usato come parte delle opzioni o argomenti di un secondo comando a cui i dati sono trasmessi in streaming (usando l'operatore di pipe "|"). Tubazioni regolari sono sufficienti se i dati devono essere l'input (standard) del secondo comando.

Ad esempio, se si utilizza il comando ls per generare un elenco di nomi e directory di file e quindi reindirizzare questo elenco nel comando xargs che esegue echo, è possibile specificare quanti nomi di file o nomi di directory vengono elaborati da echo su ciascuna iterazione come segue :

ls | xargs -n 5 echo

In questo caso, echo riceve cinque nomi di file o directory alla volta. Poiché eco aggiunge un carattere di nuova riga alla fine, vengono scritti cinque nomi su ciascuna riga.

Se si esegue un comando che restituisce elementi numerici grandi e imprevedibili (ad esempio nomi di file) che vengono passati a un altro comando per un'ulteriore elaborazione, è consigliabile controllare il numero massimo di argomenti ricevuti dal secondo comando per evitare sovraccarichi e arresti anomali.

La seguente riga di comando divide lo stream dei nomi di file prodotti trovando i gruppi di 200 prima di passare al comando cp, che li copia nel di riserva directory.

find ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

L'elemento "./" nel comando find specifica la directory corrente per la ricerca. L'argomento "-type f" limita la ricerca ai file, e il flag "-name" * .txt "filtra ulteriormente tutto ciò che non ha un'estensione" .txt ". -io la bandiera in xargs segnala che il {} notazione rappresenta ogni nome di file del vapore.

Il seguente comando trova i file denominati core in o sotto la directory / tmp e li elimina.

trova / tmp -name core -type f -print | xargs / bin / rm -f

Si noti che questo funzionerà in modo errato se ci sono nomi di file contenenti newline, virgolette singole o doppie o spazi. La seguente versione elabora i nomi dei file in modo tale che i nomi di file o directory contenenti virgolette singole o doppie, spazi o newline siano gestiti correttamente.

trova / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Invece del -io opzione puoi anche usare il -IO flag che specifica la stringa che viene sostituita dalla riga di input negli argomenti del comando come in questo esempio:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

La stringa di sostituzione è definita come "{}". Ciò significa che qualsiasi occorrenza di "{}" negli argomenti del comando viene sostituita dall'elemento di input inoltrato agli arg attraverso l'operazione pipe. Ciò consente di posizionare gli elementi di input in posizioni specifiche negli argomenti del comando per essere eseguiti (ripetutamente).