Мысал «xargs» командасының қолданылуы

Сипаттама және кіріспе

Xargs пәрмені әдетте командалық жолда пайдаланылады, онда бір пәрменнің шығысы басқа дәлелге енгізу дәлелдері ретінде беріледі.

Көптеген жағдайларда, «құбыр» және «қайта бағыттау» операторлары бірдей транзакцияны жүзеге асырғандықтан, оны орындау үшін хруптар сияқты арнайы командалар қажет емес. Алайда, кейде негізгі құбырлар мен қайта бағыттау механизмі бар мәселелер бар, мысалы, егер дәлелдерде бос орын бар болса, онда ол жеңеді.

Бұған қоса, xargs, егер қажет болса, берілген барлық дәлелдерді өңдеу үшін көрсетілген команданы бірнеше рет орындайды. Шын мәнінде, сіз әрқайсысы көрсетілген пәрменді орындаған кезде стандартты кіріс ағымынан қанша дәлел оқылуы керектігін көрсете аласыз.

Жалпы алғанда, тек бір команданың шығысы деректерді ағынмен жіберетін екінші пәрменнің нұсқауларының немесе дәлелдерінің бір бөлігі ретінде қолданылса («pipe operator» арқылы) пайдаланылса, xargs командасын пайдалану керек. Тұрақты құбырлар деректерді екінші команданың (стандартты) кірісі деп есептеуге жеткілікті.

Мысалы, ls пәрменін файл атаулары мен каталогтар тізімін жасау үшін қолдансаңыз, содан кейін осы тізімді эхо орындаудағы xargs пәрменіне бұрыңыз, әр файлдың атауын немесе каталог атауларының әр иерархқа қаншалықты эхо-қайталанады :

ls | xargs -n 5 echo

Бұл жағдайда эхо бір мезгілде бес файлды немесе каталог атауларын алады. Эхо соңында жаңа жолды енгізеді, әр жолда бес атау жазылады.

Егер сіз одан әрі өңдеу үшін басқа пәрменге жіберілетін үлкен және болжанбайтын сандарды (мысалы, файл атауларын) қайтаратын пәрменді орындасаңыз, екінші пәрменде жүктеме мен шиеленістің пайда болуына жол бермеу үшін қабылдайтын дәлелдердің максималды санын бақылау дұрыс.

Төмендегі пәрмен жолы файлдар аттары ағынын 200-ге дейінгі топтарды cp пәрменіне жібергеннен кейін шығарады, оларды көшірме каталогына көшіреді.

./ -type f -name «* .txt» -print | xargs -l200 -i cp -f {} ./backup

Табу пәрменіндегі «./» элементі іздеуге арналған ағымдағы каталогты көрсетеді. «-type f» аргументі іздеуді файлдарға шектейді және «-name» * .txt «жалаушасы» .txt «кеңейтімі жоқ барлық нәрселерді сүзеді. } белгісі будың әрбір файл атауын көрсетеді.

Келесі команданың атауы / tmp каталогының ішіндегі немесе одан асатын файлдар табылып, оларды жояды.

find / tmp -name ядросы-f -print | xargs / bin / rm -f

Жаңа сызықтары, жалғыз немесе қос тырнақшалары немесе бос орындар бар кез-келген файл атаулары болса, бұл дұрыс жұмыс істемейтінін ескеріңіз. Келесі нұсқа файл атауын бір немесе екі қос тырнақшалар, бос орындар немесе жаңа жолдар бар файл немесе каталог атаулары дұрыс өңделетін етіп өңдейді.

find / tmp -name core -type f -print0 | файлын табу xargs -0 / bin / rm -f

-i нұсқасының орнына сіз осы мысалдағы пәрмен дәлелдерінде кіріс жолы арқылы ауыстырылатын жолды анықтайтын -I- жалаушасын пайдалана аласыз:

ls dir1 | xargs-I {} -t mv dir1 / {} dir / {} / code>

Ауыстыру жолы «{}» деп анықталады. Бұл командалық аргументтердегі «{}» кез келген кездейсоқ құбырды пайдалану арқылы аргаларға жіберілген енгізу элементімен ауыстырылады. Бұл енгізу элементтерін командалардың аргументтерінде (бірнеше рет) орындалған нақты орындарға орналастыруға мүмкіндік береді.