Како користити команду каргс на Линуку

Треба да повежете неке Линук команде заједно, али једна од њих не прихвата цевоводни унос? каргс може узети излаз из једне команде и послати га другој команди као параметре.

Сви стандардни Линук услужни програми имају три тока података повезан са њима. То су стандардни улазни ток (стдин), стандардни излазни ток (стдоут) и стандардни ток грешака (стдерр).

Ови токови раде са текстом. Улаз (стдин) шаљемо у команду користећи текст, а одговор (стдоут) се уписује у прозор терминала као текст. Поруке о грешци се такође пишу у прозор терминала као текст (стдерр).

Једна од сјајних карактеристика Линук-а и оперативних система сличних Уник-у је могућност слања излаза стдоут-а из једне команде у стдин улаз друге команде. Прву команду није брига што њен излаз не иде у прозор терминала, а другу команду није брига што њен унос не долази са тастатуре.

Иако све Линук команде имају три стандардна тока, не прихватају све стдоут друге команде као улаз за свој стдин. То значи да им не можете усмеравати унос.

каргс је команда за изградњу цевовода за извршавање користећи стандардне токове података. Коришћењем каргс-а можемо учинити да команде као што су ецхо, рм и мкдир прихватају стандардни унос као аргументе.

Команда каргс

каргс ће прихватити цевоводни улаз. Такође може да прихвати унос из датотеке. каргс користи тај улаз као параметре за команде са којима смо му рекли да ради. Ако не кажемо каргс-у да ради са одређеном командом, подразумевано ће користити ецхо.

То можемо користити да покажемо како ће каргс увек генерисати једну линију излаза, чак и из вишелинијског уноса.

Ако користимо опцију -1 (навести једну датотеку по реду) са лс, добићемо а једна колона имена датотека.

ls -1 ./*.sh

Ово наводи датотеке схелл скрипте у тренутном директоријуму.

Добијамо једну колону као што смо очекивали. Ако га провучемо кроз каргс, шта ћемо добити?

ls -1 ./*.sh | xargs

Излаз се уписује у прозор терминала, као један дугачак ток текста.

  Мрежа пре веба: поглед уназад на Гопхер-а

Ова могућност омогућава да каргс унесе параметре у друге команде.

Коришћење каргс-а са вц-ом

Можемо да користимо каргс да лако натерамо вц да броји речи, знакови и редови у више датотека.

ls *.page | xargs wc

Ево шта се дешава:

лс наводи *.паге датотеке и прослеђује листу у каргс.
каргс прослеђује имена датотека у вц.
вц третира имена датотека као да их је примио као параметре командне линије.

Статистика за сваку датотеку се приказује заједно са укупним укупним износом.

Коришћење каргс-а са потврдом

Можемо да користимо опцију -п (интерактивна) да би нас каргс затражио да потврдимо да смо срећни да се настави.

Ако проследимо низ имена датотека на додир, кроз каргс, тоуцх ће креирајте датотеке за нас.

echo 'one two three' | xargs -p touch

Приказује се команда која ће бити извршена и каргс чека да одговоримо тако што ћемо укуцати „и” или „И”, или „н” или „Н” и притиснути Ентер.

Ако само притиснете Ентер, третира се као „н“. Команда се извршава само ако унесете „и“ или „И“.

Притиснули смо „и“ и притиснули Ентер. Можемо користити лс да проверимо да ли су датотеке креиране.

ls one two three

Коришћење каргс-а са више наредби

Можемо да користимо више команди са карговима користећи опцију -И (почетни аргументи).

Ова опција дефинише „стринг за замену“. Где год се токен за замену-стринг појави у командној линији, вредности које су достављене у каргс се убацују.

Хајде да употребимо команду стабла да погледамо поддиректоријуме из тренутног директоријума. Опција -д (директориј) узрокује да дрво игнорише датотеке и извештава само о директоријумима.

tree -d

Постоји један поддиректоријум који се зове „слике“.

У датотеци под називом „дирецториес.ткт“, имамо имена неких директоријума које желимо да креирамо. Можемо погледати његов садржај користећи цат.

cat directories.txt

Користићемо ово као улазне податке за каргс. Команда коју ћемо урадити је следећа:

cat directories.txt | xargs -I % sh -c 'echo %; mkdir %'

Ово се распада овако:

цат дирецториес.ткт |: Ово гура садржај датотеке дирецторориес.ткт (сва нова имена директоријума) у каргс.
каргс -И %: Ово дефинише „стринг за замену“ токеном „%“.
сх -ц: Ово покреће нову подљуску. -ц (команда) говори љусци да чита команде из командне линије.
‘одјек %; мкдир %’: сваки од токена „%“ ће бити замењен именима директоријума које прослеђује каргс. Команда ецхо ће одштампати име директоријума; команда мкдир ће креирати директоријум.

  Пуњач и прикључна станица у једном

Именици су наведени један по један.

Можемо још једном да користимо дрво да проверимо да ли су директоријуми креирани.

tree -d

Копирање датотека на више локација

Можемо да користимо каргс да нам омогућимо да копирамо датотеке на више локација једном командом.

Имена два директоријума ћемо пренети у каргове као улазне параметре. Рећи ћемо каргс-у да проследи само један од ових параметара у исто време команди са којом ради.

У овом случају, команда је цп. Дакле, ефекат је да се цп позове два пута, сваки пут са једним од два директоријума као параметром командне линије. Параметар каргс који дозвољава да се то деси је опција -н (максимални број). Поставићемо ово да буде једно.

Такође користимо опцију -в (вербосе) са цп-ом тако да извештава шта се дешава.

echo ~/Backups/ ~/Documents/page-files/ | xargs -n 1 cp -v ./*.page

Датотеке се копирају у два директорија, један по један. цп извештава о свакој радњи копирања датотеке тако да можемо да их видимо како се дешавају.

Брисање датотека у угнежђеним директоријумима

Ако имена датотека имају размаке и чудне знакове у себи — као што су знакови новог реда — каргс неће моћи да их протумаче исправно. Тај проблем можемо превазићи коришћењем опције -0 (нулл терминатор). Ово говори каргс-у да користи нулти карактер као коначни граничник за називе датотека.

У овом примеру ћемо користити финд. финд има сопствену опцију за бавећи се размаком и чудни знакови у називима датотека. То је опција -принт0 (пуно име, нул карактер).

find . -name "*.png" -type f -print0 | xargs -0 rm -v -rf "{}"

Ово се распада овако:

наћи . -наме “*.пнг”: финд ће претраживати из тренутног директоријума “.” за објекте са називима који одговарају „*.пнг“ који су датотеке (тип -ф).
-принт0: имена ће бити завршена нултим знаком, а размаци и чудни знакови ће бити покривени.
каргс -0: каргс ће такође сматрати да су називи датотека завршени нулом, а размаци и чудни знакови неће узроковати проблеме.
рм -в -рф “{}”: рм ће бити опсежан и известиће шта се дешава (-в). Биће рекурзивно (-р) и прегледаће угнежђене поддиректоријуме и уклањаће датотеке без упита (-ф). „{}“ се замењује сваким именом датотеке.

  10 система управљања најбољом праксом за медицинске професионалце [2023]

наћи .  -име

Претражују се сви поддиректорији, а датотеке које одговарају обрасцу претраге се бришу.

Уклањање угнежђених директоријума

Рецимо да желимо да уклонимо скуп угнежђених поддиректоријума. дрво ће нам дозволити да их видимо.

tree -d

find . -name "level_one" -type d printo | xargs -o rm -v -rf "{}"

Ова команда ће користити финд за рекурзивну претрагу унутар тренутног директоријума. Циљ претраге је директоријум под називом „ниво_један“. Имена директоријума се прослеђују кроз каргс у рм.

наћи .  -име

Једине значајне промене између ове команде и претходне команде су, термин за претрагу је име највишег директоријума, а -типе д каже финд да тражи директоријуме, а не датотеке.

Име сваког директоријума се штампа како се уклања. Можемо проверити помоћу дрвета:

tree -d

Сви угнежђени поддиректоријуми се бришу.

Брисање свих датотека, осим једне врсте датотеке

Можемо да користимо финд, каргс и рм да избришемо све датотеке осим једне врсте коју желимо да задржимо. Мало је контраинтуитивно, али ми дајемо назив типа датотеке који желимо да задржимо, а не назив оних које желимо да избришемо.

Опција -нот говори финд да врати имена датотека које се не подударају са обрасцем претраге. Још једном користимо опцију -И (почетни аргументи) са каргс. Овог пута токен за замену стринга који дефинишемо је „{}“. Ово ће се понашати потпуно исто као и токен за замену стринга који смо претходно генерисали, а који је био „%“.

find . -type f -not - name "*.sh" -print0 | xargs -0 -I {} rm -v {}

наћи .  -тип ф -не - име

Можемо проверити са лс. Једине датотеке које су остале у директоријуму су оне које се поклапају са „*.сх“ шаблоном претраге.

ls -l

Креирање архивске датотеке са Ксаргс-ом

Можемо да користимо финд да тражимо датотеке и проследимо их кроз каргс у тар, да креирамо архивску датотеку.

Тражићемо у тренутном директоријуму. Образац претраге је “*.паге” тако да ћемо тражити “.паге” датотеке.

find ./ - name "*.page" -type f -print0 | xargs -0 -tar -cvzf page_files.tar.gz

нађи ./ - име

Датотеке су наведене како се очекује, пошто се архивска датотека креира.

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

Понекад вам је потребна мала скела када слажете ствари заједно. каргс премошћује јаз између команди које могу да испумпају информације и команди које нису направљене да их приме.

И каргс и финд имају огроман број опција. Препоручујемо вам да погледате њихове ман странице да бисте сазнали више.