Ako používať príkaz xargs v systéme Linux
Pre niektorých skúsenejších používateľov neustále hľadáme nové spôsoby, ako pracovať inteligentnejšie a nie ťažšie na termináli. xargs je užitočný príkaz, ktorý funguje ako most medzi dvoma príkazmi, číta výstup jedného a vykonáva druhý s prečítanými položkami. Príkaz sa najčastejšie používa v scenároch, keď používateľ hľadá vzor, odstraňuje a premenúva súbory a podobne. Tu vám ukážeme, ako použiť príkaz xargs vo svoj prospech.
Čo je to xargs?
Vo svojej základnej forme xargs načíta informácie zo štandardného vstupu (alebo STDIN) a vykoná príkaz raz alebo viackrát s prečítanými položkami. Existuje mnoho jednoduchých ukážok, ale tu je jedna, ktorá ukazuje, čo tým myslím.
Ak chcete, aby xargs spustil príkaz ls v priečinku Dokumenty, spustil by som nasledujúci príkaz:
echo "Documents" | xargs lsZnak zvislej čiary | predstavuje prepojenie bez ohľadu na to, čo tomu predchádza ako STDIN pre xargs.
Môžete vidieť, že xargs prečíta môj priečinok Dokumenty bez problémov. Toto je len jeden príklad možností príkazu xargs.
Zatiaľ čo príkaz xargs možno použiť v rôznych operáciách príkazového riadka, je veľmi užitočný, keď sa použije s príkazom find. V tomto článku rozoberieme niekoľko užitočných príkladov, aby sme pochopili, ako možno xargs a find použiť spolu.
Operácie zahŕňajúce viacero súborov
Predpokladajme, že chcete skopírovať obsah "ref.txt" do všetkých textových súborov prítomných v adresári. Zatiaľ čo úloha môže inak vyžadovať vykonanie viacerých príkazov, príkaz xargs spolu s príkazom find to zjednodušujú. Mám niekoľko testovacích adresárov. Jeden má "test0.txt", ktorý obsahuje text, a druhý adresár má 10 ďalších testovacích súborov bez textu. Ak by som chcel vziať obsah test0.txt a skopírovať ho do zvyšku textových súborov v iných adresároch, spustil by som nasledujúci príkaz:
find ./test-dir1/ -name "*.txt" | xargs -n1 cp test0.txtAby sme pochopili príkaz uvedený vyššie, rozdeľme ho na dve časti.
Prvá časť je find ./test-dir1/ -name "*.txt" , ktorá hľadá všetky .txt súbory nachádzajúce sa v adresári "test-dir1". Tu môžete zadať ľubovoľný adresár.
Druhá časť, xargs -n1 cp test.txt, vezme výstup prvého príkazu (výsledné názvy súborov) a odovzdá ho cp (kópia) príkaz jeden po druhom. Všimnite si, že voľba -n je tu rozhodujúca, pretože dáva pokyn xargs použiť jeden argument na vykonanie.
Keď sa skombinujú, celý príkaz skopíruje obsah "test0.txt" do všetkých súborov .txt v adresári.
Operácie zahŕňajúce veľké množstvo argumentov
Jednou z hlavných výhod použitia xargs je jeho schopnosť spracovať veľké množstvo argumentov. Napríklad pri odstraňovaní veľkého počtu súborov naraz príkaz rm niekedy zlyhá s chybou "Zoznam argumentov je príliš dlhý". To preto, že nedokázal jednoducho zvládnuť taký dlhý zoznam argumentov. Toto je zvyčajne prípad, keď máte v priečinku, ktorý chcete odstrániť, príliš veľa súborov.
Povedzme, že máte 75 súborov PDF a pri pokuse o ich odstránenie sa zobrazuje chyba.
Dá sa to jednoducho opraviť pomocou xargs. Ak chcete odstrániť všetky tieto súbory, použite nasledujúci príkaz:
find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -fOperácie zahŕňajúce vyhľadávanie vzorov
Vývojári softvéru, ako aj správcovia systému pri práci na príkazovom riadku veľa vyhľadávajú vzory. Napríklad vývojár sa môže chcieť rýchlo pozrieť na súbory projektu, ktoré upravujú konkrétnu premennú, alebo správca systému môže chcieť vidieť súbory, ktoré používajú konkrétny konfiguračný parameter systému. V týchto scenároch vám to uľahčí xargs spolu s find a grep.
Ak chcete napríklad vyhľadať všetky súbory „.txt“, ktoré obsahujú reťazec „maketecheasier“, spustite nasledujúci príkaz:
find ./ -name "*.txt" | xargs grep "maketecheasier"Tu je výstup príkazu vytvoreného v mojom systéme.
Operácie vystrihnutia/kopírovania
Xargs spolu s príkazom find možno použiť aj na kopírovanie alebo presúvanie sady súborov z jedného adresára do druhého. Ak chcete napríklad presunúť všetky textové súbory, ktoré sú staršie ako 10 minút, z aktuálneho adresára do predchádzajúceho adresára, použite nasledujúci príkaz:
find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../Možnosť príkazového riadka -I používa príkaz xargs na definovanie reťazca nahradenia, ktorý sa nahradí názvami načítanými z výstupu príkazu find príkaz. Tu je náhradný reťazec {}, ale môže to byť čokoľvek. Ako náhradný reťazec môžete použiť napríklad „súbor“.
find . -name "*.txt" -mmin 10 | xargs -n1 -I 'file' mv 'file' ./practiceAko povedať xargs, kedy skončiť
Predpokladajme, že chcete vypísať podrobnosti o všetkých súboroch .txt prítomných v aktuálnom adresári. Ako už bolo vysvetlené, dá sa to ľahko vykonať pomocou nasledujúceho príkazu:
find . -name "*.txt" | xargs ls -lJe tu však jeden problém: príkaz xargs vykoná príkaz ls, aj keď príkaz find nedokáže nájsť žiadny súbor .txt. Nasleduje príklad.
Môžete teda vidieť, že v adresári nie sú žiadne súbory .txt, ale to nezabránilo xargs vykonať príkaz ls. Ak chcete zmeniť toto správanie, použite možnosť príkazového riadka -r:
find . -name "*.txt" | xargs -r ls -lZáver
Hoci som sa tu sústredil na používanie xargs s find, dá sa použiť aj s mnohými ďalšími príkazmi. Ak máte viacero zložitých príkazov, ktoré potrebujete vykonať, xargs je veľmi užitočný nástroj.
Ak sa vám páčil náš článok o tom, ako používať príkaz xargs v systéme Linux, nezabudnite si pozrieť ďalší obsah pre systém Linux, napríklad naše príručky o oprave chyby „na zariadení nezostáva miesto“ alebo o prekročení rýchlosti až Ubuntu.






