GNU/Linux >> Znalost Linux >  >> Linux

10 Příklady příkazů Xargs v Linuxu / UNIXu

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

Linux
  1. UNIX / Linux:10 příkladů příkazů Netstat

  2. Příklady příkazů rm v Linuxu

  3. Příklady příkazů ps v Linuxu

  1. 7 Příklady příkazů Linux df

  2. w Příklady příkazů v Linuxu

  3. příklady příkazů tail v UNIX/Linux

  1. 5 UNIX / Linux Příklady příkazů Traceroute

  2. 8 Příklady příkazů Linux TR

  3. sa Příklady příkazů v Linuxu