Piemērs "xargs" komandas izmantošanai

Apraksts un ievads

Komandu xargs parasti izmanto komandrindā, kur vienas komandas izvadi tiek nodoti kā ievades argumenti citai komandai.

Daudzos gadījumos, lai to paveiktu, nav nepieciešama īpaša komanda, piemēram, xargs, jo operatori "cauruļvads" un "novirzīšana" veic tādu pašu darījumu. Tomēr dažreiz ir problēmas ar pamata cauruļvadu un novirzīšanas mehānismu, piemēram, ja argumenti satur atstarpes, kas xarg pārvar.

Turklāt xargs izpilda norādīto komandu atkārtoti, ja nepieciešams, lai apstrādātu visus tam dotajiem argumentus. Faktiski jūs varat norādīt, cik daudz argumentu jāizlasa no standarta ievades plūsmas katru reizi, kad xargs izpilda norādīto komandu.

Parasti xargs komanda jāizmanto, ja vienas komandas izeja tiek izmantota kā daļa no otrās komandas opcijām vai argumentiem, uz kuru tiek straumēti dati (izmantojot caurules operatoru "|"). Regulāri cauruļvadi ir pietiekami, ja dati ir paredzēti otrās komandas (standarta) ievadei.

Piemēram, ja jūs izmantojat komandu ls, lai izveidotu failu nosaukumu un direktoriju sarakstu, un pēc tam caurvējat šo sarakstu komandā xargs executing echo , jūs varat norādīt, cik daudz failu nosaukumu vai direktoriju nosaukumu apstrādā echo katrā atkārtojumā šādi :

ls | xargs-n 5 atbalsis

Šajā gadījumā echo vienlaikus saņem piecus failu vai direktoriju nosaukumus. Tā kā echo beigās pievieno jaunu rindiņu, pie katras rindas tiek rakstīti pieci vārdi.

Ja izpildāt komandu, kas atdod lielus un neparedzamus skaitļu vienumus (piem., Failu nosaukumus), kas tiek nodoti tālāk citai komandai tālākai apstrādei, ir ieteicams kontrolēt maksimālo argumentu skaitu, ko saņem otrā komanda, lai izvairītos no pārslodzes un crashing.

Sekojošā komandrinda nodala failu nosaukumu straumi, ko izveido, atrodot int 200 grupās, pirms tās tiek nodotas cp komandai, un tās kopē to dublējumkopijas direktorijā.

./-veida f-name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

Rindkopas elements "./" norāda pašreizējo meklēšanu. Arguments "-type f" ierobežo meklēšanu ar failiem, un "-name" * .txt karodziņš tālāk nofiksē visu, kas nav paplašinājums ".txt". -s karogs xarg nozīmē, ka { } zīme ir katra tvaika faila nosaukums.

Tālāk norādītā komanda atrod failus ar nosaukumu core direktorijā / tmp un tos izdzēš.

find / tmp -name core-type f -print | xargs / bin / rm -f

Ņemiet vērā, ka tas nedarbosies pareizi, ja ir kādi faila nosaukumi, kas satur jaunās līnijas, viena vai divas kotācijas vai atstarpes. Nākamā versija failu nosaukumus apstrādā tā, lai faili vai direktoriju nosaukumi, kas satur vienu vai divas pēdiņas, atstarpes vai jaunās līnijas, tiek pareizi apstrādāti.

find / tmp -name core-type f -print0 | xargs -0 / bin / rm-f

Tā vietā -i opcijas var izmantot arī -I karodziņu, kurā norādīta virkne, kuru komandu argumentos aizstāj ar ievades līniju, kā šajā piemērā:

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

Rezerves virkne ir definēta kā "{}". Tas nozīmē, ka visi "{}" gadījumi komandas argumentos tiek aizstāti ar ieejas elementu, kas tiek pārsūtīts caur ar cauruļvada darbību. Tas ļauj ievadīt elementus konkrētās pozīcijās komandas argumentos, kas tiek (atkārtoti) izpildīti.