Příkaz xargs je mimořádně užitečný, když jej kombinujeme s jinými příkazy.
Tento tutoriál vysvětluje použití příkazu xargs na několika jednoduchých příkladech.
Tyto příklady vám pomohou pochopit základy toho, jak příkaz xargs funguje. Jakmile však těmto konceptům porozumíte, můžete přijít s vlastními chytrými příklady xargů k řešení různých problémů s příkazovým řádkem.
Syntaxe xargs (z manuálové stránky):
xargs [-0prtx] [-E eof-str] [-e[eof-str]] [–eof[=eof-str]] [–null] [-d oddělovač] [–oddělovač oddělovač] [-I nahradit- str] [-i[nahradit-str]] [–nahradit[=nahradit-str]] [-l[max-řádků]] [-L max-řádků] [–max-řádků[=maximální-řádků]] [ -n max-args] [–max-args=max-args] [-s max-chars] [–max-chars=max-chars] [-P max-procs] [–max-procs=max-procs] [–interactive] [–verbose] [–exit] [–no-run-if-empty] [–arg-file=file] [–show-limits] [–version] [–help] [command [initial-arguments ]]
1. Základní příklad Xargs
Příkaz xargs (ve výchozím nastavení) očekává vstup od stdin a přes vstup provede příkaz /bin/echo. Následuje, co se stane, když spustíte xargs bez jakéhokoli argumentu, nebo když je spustíte bez kombinace s jinými příkazy.
Když napíšete xargs bez jakéhokoli argumentu, budete vyzváni k zadání vstupu přes stdin:
$ xargs Hi, Welcome to TGS.
Poté, co něco napíšete, stiskněte ctrl+d, čímž se vám řetězec vrátí zpět na stdout, jak je znázorněno níže.
$ xargs Hi, Welcome to TGS.Hi, Welcome to TGS.
2. Zadejte oddělovač pomocí volby -d
Oddělovače lze použít tak, že každý znak na vstupu je brán doslovně pomocí volby -d v xargs.
V předchozím příkladu, i když vstup obsahoval \n (nový řádek) za ‚Ahoj‘, ale echovaný výstup neobsahoval nový řádek ‚\n‘ . Takže výstup v předchozím příkladu byl sloučen do jednoho řádku.
V následujícím příkladu, když použijete -d\n, zachová ve výstupu oddělovač nového řádku a zobrazí výstup přesně tak, jak byl napsán.
$ xargs -d\n Hi, Welcome to TGS.
Po napsání výše uvedeného stiskněte ctrl+d, což vám odešle řetězec zpět na stdout, jak je znázorněno níže. Tentokrát však zachová nový řádek.
$ xargs -d\n Hi, Welcome to TGS.Hi, Welcome to TGS.
3. Omezit výstup na řádek pomocí volby -n
Ve výchozím nastavení, jak bylo vysvětleno dříve, xargs zobrazuje vše, co přichází do jeho standardního nastavení, jak je znázorněno níže.
$ echo a b c d e f| xargs a b c d e f
Ale výstup příkazu xargs lze rozdělit do více řádků pomocí volby -n.
V následujícím příkladu jsme použili -n 3, které zobrazí pouze 3 položky na řádek ve výstupu xargs.
$ echo a b c d e f| xargs -n 3 a b c d e f
Stejným způsobem můžete také rozdělit výstup na 2 položky na řádek, jak je uvedeno níže, pomocí -n 2.
$ echo a b c d e f| xargs -n 2 a b c d e f
4. Vyzvat uživatele před spuštěním pomocí volby -p
Pomocí volby -p můžete potvrdit provedení příkazu xargs od uživatele.
S ohledem na předchozí příklad, pokud chceme potvrdit každé provedení příkazu /bin/echo uživatelem, použijte volbu -p spolu s volbou -n, jak je uvedeno níže.
$ echo a b c d e f| xargs -p -n 3 /bin/echo a b c ?...y /bin/echo d e f ?...a b c y d e f
V následujícím výstupu jsem řekl „n“ všem výstupům echa. Takže xargs nic neprovedl.
$ echo a b c d e f| xargs -p -n 3 /bin/echo a b c ?...n /bin/echo d e f ?...n /bin/echo ?...n
Poznámka:To je užitečné, když kombinujete xargs s příkazy, které jsou rušivé jako rm. V těchto případech možná budete chtít vidět, co dělá xargs.
5. Vyhněte se výchozímu /bin/echo pro prázdný vstup pomocí volby -r
Pokud je zde prázdný vstup (tj. příkazu xargs nebyl zadán žádný vstup), provede příkaz /bin/echo, který zobrazí nový řádek, jak je ukázáno níže.
$ xargs -p
Stiskněte ctrl-d po zadání „xargs -p“, což bude indikovat, že provedl /bin/echo, jak je uvedeno níže.
$ xargs -p /bin/echo ?...y $
6. Vytiskněte příkaz spolu s výstupem pomocí volby -t
V následujícím příkladu zadejte „abcd“ jako vstup pro příkaz xargs -t.
$ xargs -t abcd
Stisknutím ctrl-d dokončete výše uvedený příkaz xargs -t, který zobrazí příkaz, který xargs skutečně provede, před zobrazením výstupu. V tomto případě je příkaz, který xargs provede, „/bin/echo abcd“, který je zobrazen zde.
$ xargs -t abcd /bin/echo abcd abcd
7. Kombinujte Xargs s příkazem Najít
Je to jedno z nejdůležitějších použití příkazu xargs. Když potřebujete najít určitý typ souborů a provést s nimi určité akce (nejoblíbenější je akce odstranění).
Příkaz xargs je velmi účinný, když jej kombinujeme s jinými příkazy.
V následujícím příkladu jsme vzali výstup příkazu find a předali jej jako vstup příkazu xargs. Ale namísto provedení výchozího příkazu /bin/echo dáváme příkazu xargs pokyn, aby na vstupu provedl příkaz rm -rm.
Takže v tomto příkladu jsou výstupem příkazu find všechny soubory s příponou *.c, která je zadána jako vstup příkazu xargs, který zase provede příkaz „rm -rf“ na všech souborech *.c. .
$ ls one.c one.h two.c two.h $ find . -name "*.c" | xargs rm -rf $ ls one.h two.h
8. Odstraňte soubory, které mají v názvu souboru mezery
Vidíme tedy, že navzdory spuštění příkazu rm na souborech .c v tomto adresáři nebyl soubor ‚The Geek Stuff.c‘ smazán. Je to proto, že tento soubor obsahuje ve svém názvu mezery.
Jak ukazuje následující příklad, smazal všechny soubory s příponou *.c kromě jednoho. tj. soubor, který má v názvu souboru prázdné místo (tj. „The Geek Stuff.c“), nebyl smazán příkazem rm.
$ touch "The Geek Stuff.c" $ ls one.c one.h two.c two.h The Geek Stuff.c $ find . -name "*.c" | xargs rm -rf $ ls one.h two.h The Geek Stuff.c
V této situaci použijte volbu -print0 s příkazem find a volbu -0 s příkazem xargs k odstranění souborů včetně těch, které mají mezeru v názvech souborů, jak je uvedeno níže.
$ ls one.c one.h two.c two.h The Geek Stuff.c $ find . -name "*.c" -print0 | xargs -0 rm -rf $ ls one.h two.h
9. Zobrazit systémové limity na xargech pomocí volby –show-limits
Viz příklad níže:
Následující příklad zobrazuje všechna omezení stanovená operačním systémem, která budou mít vliv na způsob, jakým příkaz xargs funguje.
$ xargs --show-limits Your environment variables take up 1203 bytes POSIX upper limit on argument length (this system): 2093901 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2092698 Size of command buffer we are actually using: 131072 Execution of xargs will continue now, and it will try to read its input and run commands; if this is not what you wanted to happen, please type the end-of-file keystroke. Warning: /bin/echo will be run at least once. If you do not want that to happen, then press the interrupt keystroke
10. Zkombinujte Xargs s příkazem Grep
Příkaz xargs lze zkombinovat s příkazem grep pro filtrování konkrétních souborů z výsledků hledání příkazu find.
V následujícím příkladu příkaz find poskytl všechny soubory .c jako vstup do xargs.
Příkaz xargs spustí příkaz grep, aby nalezl všechny soubory (mezi soubory poskytovanými příkazem find), které obsahovaly řetězec ‚stdlib.h‘.
$ find . -name '*.c' | xargs grep 'stdlib.h' ./tgsthreads.c:#include ./valgrind.c:#include ./direntry.c:#include ./xvirus.c:#include ./temp.c:#include ... ... ...