Příklad použití příkazu "xargs"

Popis a úvod

Příkaz xargs se obvykle používá v příkazovém řádku, kde je výstup jednoho příkazu předán jako vstupní argumenty jinému příkazu.

V mnoha případech není pro tento účel potřeba žádný zvláštní příkaz, jako je xargs, protože provozovatelé "pipe" a "redirection" provádějí stejný typ transakce. Někdy se ovšem vyskytují problémy se základním mechanismem potrubí a přesměrování, např. Pokud argumenty obsahují mezery, překonává xargs.

Kromě toho příkaz xargs opakovaně spouští zadaný příkaz, aby zpracoval všechny argumenty, které mu byly zadány. Ve skutečnosti můžete zadat, kolik argumentů by mělo být přečteno standardním vstupním tokem pokaždé, když xargs provede daný příkaz.

Obecně by měl být použit příkaz xargs, pokud má být výstup jednoho příkazu použit jako součást možností nebo argumentů druhého příkazu, ke kterému jsou data přenášena (pomocí operátora "|"). Pravidelné potrubí je dostatečné, pokud jsou údaje určeny jako (standardní) vstup druhého příkazu.

Například pokud použijete příkaz ls k vygenerování seznamu názvů souborů a adresářů a poté potrubí tohoto seznamu do příkazu xargs, který provede echo , můžete zadat, kolik jména souborů nebo názvů adresářů zpracovává echo na každé iteraci takto :

ls | xargs -n 5 echo

V tomto případě echo obdrží najednou pět jmen souborů nebo adresářů. Vzhledem k tomu, že na konci je na konci přidán nový znak, na každém řádku je napsáno pět jmen.

Pokud provedete příkaz, který vrátí velké a nepředvídatelné číselné položky (např. Názvy souborů), které jsou předány jinému příkazu pro další zpracování, je dobré řídit maximální počet argumentů, které druhý příkaz obdrží, aby se zabránilo přetížení a zhroucení.

Následující oddíly příkazového řádku procházejí proudy názvů souborů, které se nacházejí ve skupinách 200 předtím, než jsou předány do příkazu cp , který je zkopíruje do adresáře zálohování .

najít ./ - typ f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

Prvek "./" v příkazu find určuje aktuální adresář pro vyhledávání. Argument typu "-type f" omezuje vyhledávání souborů a příznak "-name" * .txt "dále filtrovává vše, co nemá příponu" .txt ". Příznak -i v xargs signalizuje, že { } notace představuje každý název souboru páry.

Následující příkaz najde soubory se jménem v nebo pod adresářem / tmp a vymaže je.

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

Všimněte si, že to bude fungovat nesprávně, pokud existují názvy souborů obsahujících nové řádky, jednoduché nebo dvojité uvozovky nebo mezery. Následující verze zpracovává názvy souborů tak, že názvy souborů nebo adresářů obsahující jednoduché nebo dvojité uvozovky, mezery nebo nové řádky jsou správně zpracovány.

find / tmp -name jádro -type f -print0 | xargs -0 / bin / rm -f

Místo volby -i můžete také použít příznak -I, který určuje řetězec, který je nahrazen vstupním řádkem v argumentu příkazu jako v tomto příkladu:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / kód>

Náhradní řetězec je definován jako "{}". To znamená, že všechny výskyty "{}" v parametrech příkazu jsou nahrazeny vstupním prvkem přeneseným do args prostřednictvím operace potrubí. To umožňuje umístit vstupní prvky na specifické pozice v parametrech příkazu, který má být (opakovaně) proveden.