Naučte sa príkaz Bash Xargs prostredníctvom príkladov
Streamovanie údajov je bežným problémom spracovania údajov. Ale našťastie príkaz Bash xargs, všestranný nástroj, môže pomôcť pri efektívnejšom spracovaní a manipulácii so streamovanými údajmi.
V tomto návode sa na praktických príkladoch naučíte používať príkaz Bash xargs.
Zostaňte naladení a prevezmite kontrolu nad správaním príkazov pomocou príkazu Bash xargs!
Predpoklad
Tento tutoriál obsahuje praktické ukážky a budete potrebovať systém Linux s nainštalovaným shellom Bash, aby ste ho mohli sledovať. Tento tutoriál používa Ubuntu 20.04, ale mala by fungovať každá novšia distribúcia Linuxu.
Vyhľadanie a odstránenie súborov pomocou príkazu Bash xargs
Príkaz Bash xargs je pomôcka pre Linux, ktorá sa používa na vytváranie a spúšťanie príkazov zo štandardného vstupu. Tento príkaz číta vstup z stdin, analyzuje na argumenty a raz alebo viackrát vykoná zadaný príkaz s analyzovanými argumentmi.
Všeobecná syntax príkazu xargs je nasledovná:
xargs <options> <command>
Najbežnejším prípadom použitia príkazu xargs je nájsť a odstrániť súbory na základe špecifických kritérií. Môžete napríklad použiť príkaz xargs na vyhľadanie všetkých súborov starších ako zadaný počet dní a ich odstránenie.
Spustite príkaz uvedený nižšie, aby ste nášli všetky súbory staršie ako 30 dní (-mtime +30) a výstup preniesli do príkazu Bash xargs. Príkaz xargs potom vykoná príkaz rm na vynútené (-f) vymazanie každého súboru bez výzvy na potvrdenie.
Voľba -print0 nižšie vypíše názvy súborov na stdout, oddelené znakom null, pretože príkaz xargs očakáva, že jeho vstup bude oddelený nulou a nie novým riadkom.
find -mtime +30 -print0 | xargs -0 rm -fTento príkaz neposkytuje výstup, ale v nasledujúcom kroku overíte, či je odstránenie úspešné.
💡 Príkaz Bash
xargssa často používa s kanálmi na spracovanie údajov, ktoré by inak boli príliš dlhé na jeden príkaz.
Teraz spustite príkaz nižšie a vypíšte (ls) všetok obsah pracovného adresára zoradený podľa času (t) v opačnom poradí (r ).
ls -ltrVšetky súbory staršie ako 30 dní boli odstránené, ako je uvedené nižšie. V aktuálnom adresári zostanú iba nové súbory.
Hľadanie a archivácia súborov
Ďalším každodenným prípadom použitia príkazu xargs je nájdenie všetkých súborov na základe konkrétneho vzoru a vykonanie príkazu v každom z nich. Predpokladajme, že chcete nájsť všetky textové súbory a skomprimovať ich do archívu (súbor ZIP), čo vám umožní ušetriť miesto na disku. Ak áno, príkaz Bash xargs je na túto úlohu.
Spustite príkaz uvedený nižšie, aby ste nášli všetky textové súbory (*.txt) a preniesli výstup do príkazu xargs, ktorý vykoná príkaz tar na archivujte súbory na *archive-txt.tar.gz*.
Voľba -0 nižšie hovorí xargs, aby považovala svoj vstup za s hodnotou oddelenou nulou namiesto predvolenej hodnoty s oddelenou novým riadkom, takže názvy súborov s medzerami sú spracované správne.
find -name "*.txt" -print0 | xargs -0 tar -czvf archive-txt.tar.gzTeraz spustite nasledujúci príkaz a vypíšte všetky súbory obsahujúce názov archive-txt.tar.gz.
ls -la archive-txt.tar.gzNižšie si môžete overiť, či archív (archive-txt.tar.gz) existuje a či je kompresia úspešná.
Spustenie viacerých príkazov pomocou Bash xargs
Možno je potrebné spracovať súbor a chcete paralelizovať spracovanie spustením viacerých príkazov súčasne.
Napríklad namiesto spúšťania jedného príkazu echo pre každý názov súboru, ktorý sa má vložiť do textového súboru, ako je uvedené nižšie, nechajte trik xargs. Príkaz xargs podporuje spustenie viacerých príkazov na svojom vstupe.
Predpokladajme, že musíte vytvoriť adresáre pre viacero súborov. Ak áno, potrebujete iba zoznam názvov súborov a spustite príkaz xargs.
1. Spustite príkaz uvedený nižšie a vytvorte textový súbor s názvom bash-xargs-demo.txt obsahujúci zoznam názvov súborov, jeden na riadok.
# Creates a bash-xargs-demo.txt containing a list of filenames, one per line.
cat > bash-xargs-demo.txt << EOF
One
Two
Three
EOF
# Viewing the bash-xargs-demo.txt content
cat bash-xargs-demo.txt2. Ďalej spustite príkaz uvedený nižšie, aby ste si prečítali názvy súborov z textového súboru a vytvorili pre každý adresár (sh -c 'echo %; mkdir %').
Voľba -I % hovorí xargs, aby nahradil % vstupom, ktorý číta zo štandardného vstupu, čo je *bash-xargs-demo .txt*.
cat bash-xargs-demo.txt | xargs -I % sh -c 'echo %; mkdir %'💡 Možno chcete vidieť, čo sa deje na pozadí pri spustení príkazu. Ak áno, pridajte možnosť
-tk príkazuxargs, aby ste získali podrobný výstup, ako je uvedené nižšie.cat bash-xargs-demo.txt | xargs -t-I %sh-c'echo %; mkdir %'
3. Nakoniec spustite príkaz uvedený nižšie a vypíšte (ls) všetok obsah pracovného adresára v dlhom zozname (-la).
ls -laÚspešné vytvorenie adresárov môžete overiť spustením príkazu ls nižšie.
Vo výstupe nižšie môžete vidieť tri nové adresáre (Jeden, Dva a Tri), jeden pre každý vstupný riadok v textovom súbore .
Povolenie výzvy pred vykonaním
V predvolenom nastavení príkaz Bash xargs vykonáva špecifikované príkazy pre všetky vstupy bez toho, aby požadoval potvrdenie. Toto správanie môže byť nebezpečné, ak si nedáte pozor, napríklad pri odstraňovaní súborov pomocou príkazu rm.
Napríklad príkaz rm uvedený nižšie vymaže všetky súbory v aktuálnom adresári rekurzívne bez výzvy na potvrdenie. Ak ste tento príkaz omylom spustili v nesprávnom adresári, mohli by ste odstrániť veľa dôležitých súborov.
rm -rf *💡 Možno ste omylom odstránili dôležité súbory. Našťastie vám Linux umožňuje obnoviť odstránené súbory.
Ak sa chcete vyhnúť nežiaducim akciám, pridajte možnosť -p, aby ste povolili zobrazovanie výzvy pred spustením.
Spustite príkaz uvedený nižšie, aby ste nášli všetky súbory (*) v pracovnom adresári a rekurzívne ich odstránili (rm) (-rf) s výzvou na potvrdenie (-p).
find * | xargs -p rm -rf
Všimnite si nižšie, že aj keď ste použili možnosť force (-f) v príkaze rm, stále sa vám zobrazí výzva, pretože -p možnosť je pripojená k príkazu xargs. Výzva uvedená nižšie vám umožňuje pred potvrdením overiť, či príkaz vykoná to, čo očakávate.
Napíšte Y a potvrďte akciu stlačením klávesu Enter. Alebo napíšte N a stlačte Enter, ak ste urobili chybu, aby ste príkaz zrušili, a nedôjde k žiadnym škodám.
Čítanie súborov pomocou možnosti -a
Doteraz ste čítali vstup z stdin. Vedeli ste však, že xargs dokáže čítať aj vstup zo súborov? Áno! Táto funkcia môže byť užitočná, ak máte veľké množstvo údajov, ktoré je potrebné spracovať, a nechcete uchovávať všetky údaje vo svojej pamäti.
Spustite nižšie uvedený príkaz na prečítanie a vytlačenie vstupu (-a) zo súboru foo.txt do stdout.
💡 Upozorňujeme, že ak chcete, aby
xargsmohol čítať vstup zo súborov, musíte pred všetky ostatné možnosti pridať možnosť-a.
xargs -a foo.txtFiltrovanie výsledkov vyhľadávania pomocou xargs a grep
Príkaz grep je užitočný pri vyhľadávaní textov v súboroch. Ale jednou nevýhodou je, že proces môže trvať dlho, ak prehľadávate veľa súborov. Dobrou správou je, že xargs dokáže paralelizovať príkaz grep, čím výrazne urýchli vyhľadávanie.
Spustite nasledujúci príkaz, aby ste nášli všetky textové súbory (*) v pracovnom adresári, filtrovali a vytlačili (grep) všetky súbory, ktoré obsahujú Reťazec Príklady.
find . -name "*.txt" | xargs grep 'Examples'Ako vidíte nižšie, dva súbory obsahujú reťazec Examples.
Záver
Streamovanie vstupu z stdin je výkonná funkcia príkazu Bash xargs, ale to nie je všetko. V tomto návode ste sa naučili čítať vstup zo súborov pomocou voľby -a. Okrem toho ste sa dotkli používania xargs s ďalšími príkazmi, ako je napríklad grep, aby ste urýchlili svoje pracovné postupy.
V tomto bode by ste mali byť spokojní s použitím príkazu Bash xargs. Experimentujte s rôznymi spôsobmi použitia xargs, aby ste našli metódu, ktorá vám najlepšie vyhovuje!
Prečo neskúsiť spustiť programy paralelne pomocou xargs?










