Android

Příkaz Xargs v Linuxu

Python on Azure: Part 2—Deploying Django services to Azure Web Apps | Azure Friday

Python on Azure: Part 2—Deploying Django services to Azure Web Apps | Azure Friday

Obsah:

Anonim

Nástroj xargs vám umožňuje vytvářet a provádět příkazy ze standardního vstupu. Obvykle se používá v kombinaci s jinými příkazy potrubím.

S xargs můžete poskytnout standardní vstup jako argument pro nástroje příkazového řádku, jako jsou mkdir a rm .

V tomto tutoriálu se seznámíme se základy používání příkazu xargs .

Jak používat Linux xargs Command

xargs čte argumenty ze standardního vstupu oddělené mezerami nebo řádky a provede zadaný příkaz pomocí vstupu jako argumenty příkazu. Pokud není zadán žádný příkaz, výchozí je /bin/echo .

Syntaxe příkazu xargs je následující:

xargs]

Nejzákladnějším příkladem použití xargs by bylo předat několik řetězců oddělených mezerami pomocí roury do xargs a spustit příkaz, který tyto řetězce použije jako argumenty.

echo "file1 file2 file3" | xargs touch

Ve výše uvedeném příkladu xargs standardní vstup do xargs a pro každý argument se spustí příkaz touch , čímž se vytvoří tři soubory. Je to stejné, jako kdybyste spustili:

touch file1 file2 file3

Jak zobrazit příkaz a vyzvat uživatele

Chcete-li příkaz vytisknout na terminálu před jeho provedením, použijte volbu -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Zadejte y nebo Y pro potvrzení a spuštění příkazu:

touch file1 file2 file3 ?…y

Tato možnost je užitečná při provádění destruktivních příkazů.

Jak omezit počet argumentů

Ve výchozím nastavení je počet argumentů předaných příkazu určen limitem systému.

Volba -n ( --max-args ) určuje počet argumentů, které mají být předány danému příkazu. xargs spustí zadaný příkaz tolikrát, kolikrát je třeba, dokud nejsou vyčerpány všechny argumenty.

V následujícím příkladu je počet argumentů, které jsou čteny ze standardního vstupu, omezen na 1.

echo "file1 file2 file3" | xargs -n 1 -t touch

Jak můžete vidět z podrobného výstupu níže, příkaz touch se provádí samostatně pro každý argument:

touch file1 touch file2 touch file3

Jak spustit více příkazů

Chcete-li spouštět více příkazů s xargs , použijte volbu -I . Funguje tak, že definuje možnost replace-str za volbou -I a všechny výskyty replace-str jsou nahrazeny argumentem předaným xargs.

Následující příklad xargs spustí dva příkazy, nejprve vytvoří soubory pomocí touch a potom vypíše soubory pomocí příkazu ls :

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

Běžná volba pro replace-str je % . Můžete však použít jiný zástupný symbol, například ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Jak určit oddělovač

Použijte volbu -d ( --delimiter ) pro nastavení vlastního oddělovače, kterým může být buď jeden znak, nebo úniková sekvence začínající na \ .

Následující příklad používáme ; jako oddělovač:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

Jak číst položky ze souboru

Příkaz xargs může také číst položky ze souboru místo standardního vstupu. Chcete-li to provést, použijte volbu -a ( --arg-file ) následovanou názvem souboru.

V následujícím příkladu bude příkaz xargs číst soubor ips.txt a ping každou IP adresu.

ips.txt

8.8.8.8 1.1.1.1

Používáme také volbu -L 1 , která dává xargs pokyn, aby najednou přečetli jeden řádek. Pokud je tato volba vynechána, xargs předají všechny IP adresy jednomu příkazu ping .

xargs -t -L 1 -a ips.txt ping -c 1

ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms… ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

Použití xargs s find

xargs se nejčastěji používá v kombinaci s příkazem find . Pomocí xargs find můžete vyhledat konkrétní soubory a poté pomocí xargs provádět operace s těmito soubory.

Chcete-li se vyhnout problémům s názvy souborů, které obsahují nové řádky nebo jiné speciální znaky, vždy použijte volbu find -print0 , která způsobí, že find tisk celého názvu souboru následovaného nulovým znakem. Tento výstup lze správně interpretovat xargs pomocí volby -0 , (- --null ).

V následujícím příkladu find tisk úplných jmen všech souborů v adresáři /var/www/.cache a xargs předají cesty k souboru rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Používání xargů k oříznutí znaků mezery

xargs lze také použít jako nástroj k odstranění mezery z obou stran daného řetězce. Jednoduše dejte řetězec do příkazu xargs a provede oříznutí:

echo " Long line " | xargs

Long line

To může být užitečné při porovnávání řetězců v shellových skriptech.

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

Závěr

xargs je obslužný program příkazového řádku v systému Linux, který umožňuje vytvářet a provádět příkazy.

Podrobnější informace o každé možnosti xargs naleznete v manuálové stránce xargs.

terminál xargs