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ář.