Как да използвате командата xargs в Linux

Подкана за терминал на Linux на лаптоп

Фатмавати Ахмад Заенури/Shutterstock



Трябва да наредите някои команди на Linux заедно, но една от тях не приема подадено въвеждане? |_+_| може да вземе изхода от една команда и да го изпрати на друга команда като параметри.

Всички стандартни помощни програми на Linux имат три потока от данни свързани с тях. Те са стандартният входен поток (stdin), стандартният изходен поток (stdout) и стандартният поток за грешки (stderr).





Тези потоци работят с текст. Изпращаме вход (stdin) към команда, използвайки текст, а отговорът (stdout) се записва в прозореца на терминала като текст. Съобщенията за грешки също се записват в прозореца на терминала като текст (stderr).

Една от страхотните характеристики на Linux и Unix-подобни операционни системи е възможността за прехвърляне на изхода на stdout от една команда към stdin входа на втора команда. Първата команда не се интересува, че нейният изход не отива в терминален прозорец, а втората команда не се интересува, че нейният вход не идва от клавиатура.



Въпреки че всички команди на Linux имат трите стандартни потока, не всички от тях приемат stdout на друга команда като вход към своя stdin. Това означава, че не можете да насочвате вход към тях.

Реклама

|_+_| е команда за изграждане на тръбопроводи за изпълнение, използвайки стандартните потоци от данни. С помощта на |_+_| можем да правим команди като |_+_|, |_+_| и |_+_| приема стандартен вход като аргументи.

Командата xargs

|_+_| ще приеме тръбопроводен вход. Може също да приема вход от файл. |_+_| използва този вход като параметри за командите, с които сме му казали да работи. Ако не кажем |_+_| за да работи с конкретна команда, по подразбиране ще използва |_+_|.



Можем да използваме това, за да демонстрираме как |_+_| винаги ще генерира единичен изходен ред, дори от многоредов вход.

Ако използваме |_+_| (избройте по един файл на ред) опция с |_+_|, получаваме a една колона с имена на файлове .

xargs

Това изброява файловете на shell скриптове в текущата директория.

Получаваме една колона, както се очаква. Ако го направим през |_+_| какво получаваме?

xargs

Реклама

Резултатът се записва в прозореца на терминала като един дълъг поток от текст.

Именно тази способност позволява |_+_| захранване на параметри в други команди.

Използване на xargs с wc

Можем да използваме |_+_| лесно да има |_+_| пребройте думи, знаци и редове в множество файлове.

xargs

Ето какво се случва:

  • |_+_| изброява *.page файловете и предава списъка на |_+_|.
  • |_+_| предава имената на файловете на |_+_|.
  • |_+_| третира имената на файловете, сякаш ги е получил като параметри на командния ред.

Статистиката за всеки файл се показва заедно с общата сума.

Използване на xargs с потвърждение

Можем да използваме |_+_| (интерактивна) опция за |_+_| подканете ни за потвърждение, че се радваме да продължи.

Ако предадем низ от имена на файлове на |_+_|, през |_+_|, |_+_| ще създайте файловете за нас.

echo

Реклама

Показва се командата, която ще бъде изпълнена и |_+_| чака да отговорим, като напишете y или Y, или n или N и натиснете Enter.

Ако просто натиснете Enter, се третира като n. Командата се изпълнява само ако напишете y или Y.

Натиснахме y и натиснахме Enter. Можем да използваме |_+_| за да проверите дали файловете са създадени.

rm

Използване на xargs с множество команди

Можем да използваме множество команди с |_+_| с помощта на |_+_| опция (първоначални аргументи).

Тази опция дефинира низ за замяна. Където и токенът за заместващия низ се появи в командния ред, стойностите, които са били предоставени на |_+_| се вмъкват.

Нека използваме |_+_| команда, за да разгледате поддиректориите от текущата директория. |_+_| (директория) опция причинява |_+_| да игнорира файлове и да докладва само за директории.

mkdir

Има една поддиректория, наречена изображения.

Реклама

Във файл, наречен directories.txt, имаме имената на някои директории, които искаме да създадем. Можем да разгледаме съдържанието му с помощта на |_+_|.

xargs

Ще използваме това като входни данни за |_+_|. Командата, която ще изпълним е следната:

xargs

Това се разпада така:

  • cat directories.txt | : Това избутва съдържанието на файла directorories.txt (всички нови имена на директории) в |_+_|.
  • xargs -I % : Това дефинира заместващ низ с токена %.
  • sh-c : Това стартира нова подчерупка. |_+_| (команда) казва на обвивката да чете команди от командния ред.
  • ‘ехо %; mkdir %’ : всеки от % символите ще бъде заменен от имената на директории, които се предават от |_+_|. |_+_| командата ще отпечата името на директорията; |_+_| командата ще създаде директорията.

Директориите са изброени една по една.

Можем да използваме |_+_| още веднъж, за да проверите дали директориите са създадени.

xargs

Копиране на файлове на множество места

Можем да използваме |_+_| за да ни позволи да копираме файлове на множество места с една команда.

Ще изпратим имената на две директории в |_+_| като входни параметри. Ще кажем |_+_| да предава само един от тези параметри в даден момент на командата, с която работи.

В този случай командата е |_+_|. Така че ефектът е да извикате |_+_| два пъти, всеки път с една от двете директории като параметър на командния ред. |_+_| параметър, който позволява това да се случи е |_+_| опция (максимален брой). Ще настроим това да бъде едно.

Реклама

Ние също използваме |_+_| (подробна) опция с |_+_| така че да докладва какво се случва.

echo

Файловете се копират в двете директории, една по една. |_+_| отчита всяко действие за копиране на файл, за да можем да видим как се извършва.

Изтриване на файлове във вложени директории

Ако имената на файлове имат интервали и странни знаци в тях—като знаци за нов ред— |_+_| няма да могат да ги тълкуват правилно. Можем да преодолеем този проблем, като използваме опцията -0 (нулев терминатор). Това казва |_+_| за да използвате нулевия символ като краен разделител за имена на файлове.

Ще използваме |_+_| в този пример. |_+_| има своя собствена опция за справяне с пробелите и странни знаци в имената на файлове. Това е |_+_| (пълно име, нулев знак).

xargs

Това се разпада така:

  • намирам . -име *.png : |_+_| ще търси от текущата директория. за обекти с имена, които съответстват на *.png, които са файлове (|_+_|).
  • -print0 : имената ще бъдат завършени с нулев знак, а интервалите и странните знаци ще бъдат обслужени.
  • xargs -0 : xargs също така ще счита имената на файлове за завършващи с нула и интервалите и странните знаци няма да създават проблеми.
  • rm -v -rf {} : rm ще бъде многословен и ще докладва какво се случва (|_+_|). Той ще бъде рекурсивен (-r) и ще преглежда вложени поддиректории и ще премахва файлове без подкана (|_+_|). {} се заменя с всяко име на файл.

Всички поддиректории се търсят и файловете, които съответстват на шаблона за търсене, се изтриват.

Премахване на вложени директории

Да кажем, че искаме да премахнем набор от вложени поддиректории. |_+_| ще ни позволи да ги видим.

-1

lsРеклама

Тази команда ще използва find за рекурсивно търсене в текущата директория. Целта за търсене е директория, наречена level_one. Имената на директориите се предават през |_+_| до |_+_|.

Единствените значителни промени между тази команда и предишната команда са, терминът за търсене е името на най-горната директория и |_+_| казва |_+_| да търси директории, а не файлове.

Името на всяка директория се отпечатва, когато бъде премахната. Можем да проверим с |_+_| :

xargs

Всички вложени поддиректории се изтриват.

Изтриване на всички файлове, с изключение на един тип файл

Можем да използваме |_+_|, |_+_| и |_+_| за да изтриете всички файлове освен един тип, който искаме да запазим. Това е леко противоинтуитивно, но ние предоставяме името на файловия тип, който желаем пазя , а не името на тези, които искаме да изтрием.

|_+_| опцията казва |_+_| за да върнете имената на файловете, които недей съвпадат с модела на търсене. Ние използваме |_+_| (първоначални аргументи) опция с |_+_| още веднъж. Този път символът за заместващ низ, който дефинираме, е {}. Това ще се държи точно по същия начин като маркера за заместващ низ, който генерирахме по-рано, което се оказа %.

xargs

Можем да проверим с |_+_|. Единствените файлове, останали в директорията, са тези, които съответстват на шаблона за търсене *.sh.

xargs

Създаване на архивен файл с Xargs

Можем да използваме |_+_| да търсите файлове и да ги предавате през |_+_| до |_+_|, за да създадете архивен файл.

Реклама

Ще търсим в текущата директория. Моделът за търсене е *.page, така че ще търсим .page файлове.

wc

Файловете са изброени според очакванията, тъй като архивният файл е създаден.

Посредникът на данни

Понякога имате нужда от малко скеле, когато подреждате нещата заедно. |_+_| преодолява пропастта между командите, които могат да изпомпват информация и командите, които не са създадени, за да я приемат.

И двете |_+_| и |_+_| има огромен брой опции. Насърчаваме ви да разгледате техните man страници, за да научите повече.

Linux команди
Файлове катран · pv · котка · такт · chmod · сцепление · разл · sed · С · човек · pushd · popd · fsck · тестов диск · сек · fd · пандока · CD · $PATH · awk · присъединяване · jq · сгънете · уникален · journalctl · опашка · състояние · ls · fstab · изхвърли · по-малко · chgrp · chown · rev · виж · струни · Тип · преименувайте · цип · разархивирайте · монтиране · umount · Инсталирай · fdisk · mkfs · rm · rmdir · rsync · df · gpg · ние · нано · mkdir · от · вътрешен · кръпка · преобразувам · rclone · накъсайте · SRM
процеси псевдоним · екран · връх · хубаво · renice · напредък · strace · система · tmux · chsh · история · в · партида · Безплатно · който · dmesg · потребителски мод · п.с · chroot · xargs · tty · мизичко · lsof · vmstat · изчакване · стена · да · убиват · сън · sudo · неговата · време · groupadd · потребителски мод · групи · lshw · изключвам · рестартирайте · Спри се · изключване · passwd · lscpu · crontab · дата · bg · fg
Работа в мрежа netstat · пинг · трасиране · ip · ss · кой е · fail2ban · bmon · Вие · пръст на ръката · nmap · ftp · къдрица · wget · Кой · кой съм аз · В · iptables · ssh-keygen · ufw

СВЪРЗАНИ: Най-добрите Linux лаптопи за разработчици и ентусиасти

ПРОЧЕТЕТЕ СЛЕДВАЩО Снимка на профила на Дейв Маккей Дейв Маккей
Дейв Маккей за първи път използва компютри, когато перфорираната хартиена лента беше на мода и оттогава той програмира. След повече от 30 години в ИТ индустрията, той вече е технологичен журналист на пълен работен ден. По време на кариерата си той е работил като програмист на свободна практика, мениджър на международен екип за разработка на софтуер, ръководител на проекти за ИТ услуги и, последно, като служител по защита на данните. Неговото писане е публикувано от howtogeek.com, cloudsavvyit.com, tenterpriser.com и opensource.com. Дейв е евангелист на Linux и привърженик на отворен код.
Прочетете пълната биография

Интересни Статии