Прыклад Выкарыстанне ў «xargs» Command

Апісанне і ўкараненне

Xargs каманда звычайна выкарыстоўваюцца ў камандным радку , дзе выснова адной каманды перадаюцца ў якасці ўваходных аргументаў іншай каманды.

У многіх выпадках, ніякіх спецыяльных каманд, такіх, як патрабуецца xargs, каб дамагчыся гэтага, бо «труба» і «Перанакіраванне» аператары выконваюць тую ж самую аперацыю тыпу. Тым не менш, часам узнікаюць праблемы з асноўным трубаправодам і механізмам перасылак, напрыклад, калі аргументы ўтрымліваюць прабелы, якія xargs пераадольвае.

Акрамя таго, xargs выконвае паказаную каманду некалькі разоў, калі гэта неабходна, каб апрацаваць усе аргументы, перададзеныя яму. На самай справе, вы можаце паказаць, колькі аргументаў павінны быць прачытаныя паток стандартнага ўводу кожны раз, калі xargs выконвае паказаную каманду.

Увогуле, каманда xargs варта выкарыстоўваць, калі выснова адной каманды будзе выкарыстоўвацца ў якасці часткі параметраў або аргументаў другой каманды, для якой дадзеныя струменевых (з дапамогай аператара трубы «|»). Рэгулярнае трубаправодаў дастаткова, калі дадзеныя прызначаныя, каб быць (стандарт) ўводу другой каманды.

Напрыклад, калі вы выкарыстоўваеце Ls каманду , каб стварыць спіс імёнаў файлаў і каталогаў, а затым перадаць гэты спіс у xargs выканання каманд рэха , вы можаце паказаць , колькі імёнаў файлаў або імёны каталогаў апрацоўваюцца рэха на кожнай ітэрацыі наступным :

Ls | xargs -n 5 рэха

У гэтым выпадку рэха атрымлівае пяць імёнаў файлаў ці каталогаў адначасова. Так як рэха дадае сімвал новага радка ў рэшце рэшт, пяць імёнаў напісаны на кожнай радку.

Калі выканаць каманду, якая вяртае вялікае і непрадказальнае лік элементаў (напрыклад, імёны файлаў), якія перадаюцца на іншую каманду для далейшай апрацоўкі, што гэта добрая ідэя, каб кантраляваць максімальную колькасць аргументаў, што другая каманда атрымлівае, каб пазбегнуць перагрузак і збоі.

Наступная каманда разбівае паток імёнаў файлаў , атрыманых знайсці ИНТ груп 200 , перш чым перайшлі да СП камандзе, якая капіюе іх у каталог рэзервовага капіявання.

знайсці ./ -type ф -name "* .txt" -Print | xargs -i -l200 ф -f {} ./backup

Элемент «./» у камандзе знаходзіць вызначае бягучы каталог для пошуку. «-тыпу е» аргумент абмяжоўвае пошук файлаў, і «-name" * .txt "сцяг дадаткова фільтруе ўсё , што не маюць» .txt ». Сцяг -i ў xargs сігналаў , што { } абазначэнне ўяўляе кожнае імя файла пара.

Наступная каманда знаходзіць файлы з імем ядра ці ніжэй каталога / TMP і выдаляе іх.

знайсці / TMP -name ядро ​​тыпу F -print | xargs / бен / ГТ -f

Звярніце ўвагу, што гэта будзе працаваць няправільна, калі ёсць якія-небудзь імёны файлаў, якія змяшчаюць сімвалы новага радка, адзінарныя або двайныя двукоссі, ці прабелы. Наступная версія апрацоўвае імёны файлаў такім чынам, што ў імёнах файлаў і каталогаў, якія змяшчаюць адзінарныя або двайныя двукоссі, прабелы або пераклады радкоў правільна апрацаваны.

знайсці / TMP -name ядро ​​тыпу F -print0 | xargs -0 / бен / ГТ -f

Замест опцыі -i вы можаце таксама выкарыстоўваць сцяг -I , які паказвае радок, якая замяняецца на радок уводу ў аргументы каманды , як у гэтым прыкладзе:

Ls dir1 | xargs -I {} -t мв dir1 / {} рэж / {} / код>

Радок замены вызначаецца як «{}». Гэта азначае, што любыя ўваходжання «{}» у аргументах каманды замяняецца ўваходных элемент перасылаецца ў Арг праз аперацыю трубы. Гэта дазваляе размяшчаць элементы ўводу ў пэўных пазіцыях у аргументах каманды, каб быць (паўторна) выконваецца.