Jak používat příkaz xargs v Linux Mintu

1085__130x130_linux-terminalUž jste někdy byli v situaci, kdy jste museli zadávat znovu a znovu stejný příkaz pro více souborů? Pokud ano, tak víte, jak je to zdlouhavé a neefektivní. Mám pro vás ale dobrou zprávu; existuje jednodušší způsob, jak se takové práce vyvarovat, a sice použitím příkazu xargs. Tímto příkazem můžete efektivně zpracovávat více souborů, což vám ušetří čas a energii.

V dnešním malém tutoriálu se naučíte, jak spustit příkaz nebo skript pro zpracování více souborů najednou, abyste se vyhnuli nelehkému zpracovávání mnoha souborů jednotlivě.

Pro použití příkazu xargs potřebujete dva kroky. Nejprve musíte vybrat soubory, kterých se má daná operace týkat. Za druhé je pak třeba zadat, jaký příkaz nebo skript bude spuštěn pro jeden každý vybraný soubor.

V tomto tutoriálu si předvedeme tři příklady použití příkazu xargs pro zpracování souborů, umístěných v několika různých adresářích:

  1. Spočítání počtu řádků ve všech souborech
  2. Tisk první řádky konkrétního souboru
  3. Zpracování každého souboru pomocí vlastního skriptu

 

Vytvořte si v domovském adresáři adresář s názvem xargstest (adresářový strom lze zobrazit pomocí příkazu tree v kombinaci s příznakem -if, který zobrazí výsledky bez odsazení a úplnou cestu pro každý obsažený soubor):

Příkaz terminálu:
tree -if xargstest/

 

xar1

 

Obsah každého ze šesti souborů je následující:

 

xar2

 

Adresář xargstest, jeho podadresáře a soubory dále použijeme v následujících příkladech.

 

Příklad 1: Spočítání počtu řádků ve všech souborech

Jak již bylo zmíněno výše, prvním krokem pro použití příkazu xargs je vybrat soubory, pro které bude spuštěn příkaz nebo skript. Můžeme použít příkaz find k identifikaci a zobrazení souborů, které nás zajímají. Příznak -name ‚soubor??‘ určuje, že pouze soubory, jejichž názvy začínají na „soubor“ s přidanými jakýmikoliv dvěma znaky, budou vybrány v rámci adresáře xargstest. Toto vyhledávání je standardně rekurzivní, což znamená, že příkaz find vyhledá odpovídající soubory v nejen v adresáři xargstest, ale i ve všech jeho podadresářích.

Příkaz terminálu:
find xargstest/ -name 'soubor??'

 

xar3

 

Můžete si také výsledky seřadit postupně:

Příkaz terminálu:
find xargstest/ -name 'soubor??' | sort

 

xar4

 

Nyní přejdeme k druhému kroku, což je vykonání vlastního příkazu. Použijeme příkaz wc -l pro spočítání řádků v každém souboru (zobrazeno na začátku každého řádku výstupu):

Příkaz terminálu:
find xargstest/ -name 'soubor??' | sort | xargs wc -l

 

xar5

 

Vidíte, že místo pracného ručního zadávání příkazu wc -l  pro každý ze souborů, umožňuje příkaz xargs vykonat tuto operaci v jednom kroku. Takže úkol, které se dříve zdál téměř nezvládnutelný, jako například zpracování stovky jednotlivých souborů, lze takto provádět poměrně snadno.

 

Příklad 2: Tisk první řádky konkrétního souboru

Nyní, když už znáte základy používání příkazu xargs, tak si budete moci vybrat příkaz, který chcete spustit. Někdy možná budete potřebovat spouštět příkazy pouze pro podmnožinu souborů a ignorovat ostatní. V tomto případě můžete použít příkaz find s příznakem -name a znakem ? (odpovídá jednomu libovolnému znaku) pro výběr konkrétního souboru pro výstup příkazu xargs. Například, chcete-li vytisknout první řádek všech souborů, které končí na „B“ a ignorovat soubory, které končí na „A“, použijte následující kombinaci příkazů ( příznak -n1 vytiskne první řádek v souboru):

Příkaz terminálu:
find xargstest/ -name 'soubor?B' | sort | xargs head -n1

 

xar6

 

Vidíte, že byly zpracovány pouze soubory s názvy, které končí na „B“ a všechny soubory, které končí na „A“ byly ignorovány.

 

Příklad 3: Zpracování každého souboru pomocí vlastního skriptu

Nakonec možná budete potřebovat spustit vlastní skript (například v Bashi, Pythonu nebo Perlu) pro dané soubory. Chcete-li to provést, jednoduše nahraďte název vašeho skriptu místo příkazu wc, jak je uvedeno výše:

Příkaz terminálu:
find xargstest/ -name 'soubor??' | xargs můjskript.sh

Vlastní skript můjskript.sh musí být napsán tak, aby se název souboru dal použít jako argument a aby byl spustitelný. Výše uvedený příkaz a pak vyvolá spuštění skriptu pro každý soubor, nalezený příkazem find.

Všimněte si, že u výše uvedených příkladů jsou jen názvy souborů, které neobsahují mezery. Obecně lze říci, že práce se soubory v  linuxovém prostředí je mnohem efektivnější při použití názvů souborů bez mezer. Pokud potřebujete zpracovat názvy souborů s mezerami, tak výše uvedené příkazy nemusí korektně fungovat, proto raději pracujte s názvy souborů bez mezer. To se můžete provést pomocí  příznaku -print0 u příkazu find (který zobrazí celý název souboru ve standardním výstupu, následovaným znakem null) a příznaku -0 u příkazu xargs (který interpretuje znak null jako konec řetězce) tak, jak vidíte níže:

Příkaz terminálu:
find xargstest/ -name 'soubor*' -print0 | xargs -0 myscript.sh

Dále si všimněte, že argument pro -name byl změněn na ‚soubor*‘ , což znamená, že budou vybrány všechny soubory, jejichž názvy začínají na „soubor“, bez ohledu na počet znaků.

 

Závěr

Po přečtení dnešního tutoriálu budete lépe rozumět možnostem příkazu xargs a také možnostem jeho implementace do vaší práce. Budete moci trávit více času příjemnějšími činnostmi, než je práce s neustále se opakujícími úkoly. Pro více informací a další možnosti příkazu xargs, zadejte v terminálu příkaz:

Příkaz terminálu:
 man xargs

 

 

Štítky , , , .Záložka pro permanentní odkaz.

Komentáře jsou uzavřeny.