xargs nástroj umožňuje vytvářet a spouštět příkazy ze standardního vstupu. Obvykle se používá v kombinaci s dalšími příkazy prostřednictvím potrubí.
Pomocí xargs , můžete poskytnout standardní vstup jako argument nástrojům příkazového řádku, jako je mkdir a rm .
V tomto tutoriálu probereme základy používání xargs příkaz.
Jak používat Linux xargs Příkaz #
xargs přečte argumenty ze standardního vstupu, oddělené mezerami nebo novými řádky, a provede zadaný příkaz pomocí vstupu jako argumentů příkazu. Pokud není zadán žádný příkaz, výchozí je /bin/echo .
Syntaxe pro xargs příkaz je následující:
xargs [OPTIONS] [COMMAND [initial-arguments]]
Nejzákladnější příklad použití xargs by bylo předat několik řetězců oddělených mezerami pomocí svislé čáry do xargs a spusťte příkaz, který tyto řetězce použije jako argumenty.
echo "file1 file2 file3" | xargs touch
Ve výše uvedeném příkladu přivádíme standardní vstup do xargs a touch příkaz se spustí pro každý argument, čí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 -t (--verbose ) možnost:
echo "file1 file2 file3" | xargs -t touch
touch file1 file2 file3
Pokud chcete, aby se před provedením každého příkazu zobrazila výzva, zda se má spustit, použijte -p (--interactive ) možnost:
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ředávaných příkazu určen limitem systému.
-n (--max-args ) volba 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 potřeba, dokud nejsou vyčerpány všechny argumenty.
V následujícím příkladu je počet argumentů, které se čtou 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, dotykový příkaz se provádí samostatně pro každý argument:
touch file1
touch file2
touch file3
Jak spouštět více příkazů #
Chcete-li spustit více příkazů pomocí xargs , použijte -I volba. Funguje tak, že definuje replace-str za -I a všechny výskyty replace-str jsou nahrazeny argumentem předaným xargs.
Následující xargs příklad spustí dva příkazy, nejprve vytvoří soubory pomocí touch a poté zobrazí seznam souborů s ls příkaz:
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 zadat oddělovač #
Použijte -d (--delimiter ) možnost nastavit vlastní oddělovač, kterým může být buď jeden znak, nebo sekvence escape začínající \ .
V následujícím příkladu 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 namísto standardního vstupu. Chcete-li tak učinit, použijte -a (--arg-file ) následovaná názvem souboru.
V následujícím příkladu xargs příkaz přečte ips.txt a ping na každou IP adresu.
8.8.8.8
1.1.1.1
Používáme také -L 1 volba, která dává pokyn xargs přečíst jeden řádek najednou. Pokud je tato možnost vynechána, xargs předá všechny IP adresy jedinému ping příkaz.
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žívání xargs pomocí find #
xargs se nejčastěji používá v kombinaci s find příkaz. Můžete použít find vyhledejte konkrétní soubory a poté použijte xargs provádět operace s těmito soubory.
Abyste se vyhnuli problémům s názvy souborů, které obsahují nové řádky nebo jiné speciální znaky, vždy použijte find -print0 volba, která způsobí find vytiskne celý název souboru následovaný znakem null. Tento výstup lze správně interpretovat pomocí xargs pomocí -0 , (--null ).
V následujícím příkladu find vytiskne úplné názvy všech souborů v /var/www/.cache adresář a xargs předá cesty k souboru do rm příkaz:
find /var/www/.cache -type f -print0 | xargs -0 rm -f Použití xargs k oříznutí mezer mezi znaky #
xargs lze také použít jako nástroj k odstranění mezer z obou stran daného řetězce. Jednoduše zadejte řetězec do 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ů ve skriptech shellu.
#!/bin/bash
VAR1=" Linuxize "
VAR2="Linuxize"
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
## Using xargs to trim VAR1
if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
Strings are not equal.
Strings are equal.
Závěr č.
xargs je nástroj příkazového řádku v systému Linux, který vám umožňuje vytvářet a spouštět příkazy.
Pro podrobnější informace o každém xargs možnost, přečtěte si manuálovou stránku xargs.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.