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, které překonávají 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í příkazový řádek odděluje proud souborů názvů vytvořených při hledání skupin 200 před předáním příkazu cp, který je zkopíruje do složky zálohování adresář.
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 ". -i příznak v xargs signalizuje, že {} zápis označuje 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 toho -i možnost můžete také použít -I příznak, 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.




