Ekzemplo Uzoj de la "xargs" Komando

Priskribo kaj Enkonduko

La komando de xargs estas kutime uzita en komandlinio, kie la eligo de unu komando pasas kiel eniga argumento al alia komando.

En multaj kazoj, neniu speciala komando, kiel ekzemple xargs, estas necesa por plenumi tion, pro tio ke la telefonistoj de "tubo" kaj "redirektado" plenumas la saman tipan transakcion. Tamen, kelkfoje estas aferoj kun la baza tubado kaj redirekta mekanismo, ekz., Se argumentoj enhavas spacojn, ke xargs venkas.

Aldone, xargs ekzekutas la specifan komandon ree, se necese, por procesi ĉiujn argumentojn donitajn al ĝi. Fakte, vi povas specifi kiom da argumentoj oni devas legi de la norma eniga fluo ĉiufoje kiam la xargs ekzekutas la specifan komandon.

Ĝenerale, la komando de xargs devus esti uzata se la eligo de unu komando devas esti uzata kiel parto de la ebloj aŭ argumentoj de dua komando al kiu la datumoj estas publikigitaj (uzante la pipe-operatoro "|"). Regula pipado estas sufiĉa se la datumoj intencas esti la (norma) enigo de la dua komando.

Ekzemple, se vi uzas la komandon ls por generi liston de dosieraj nomoj kaj dosierujoj, kaj tiam pipi ĉi tiun liston en la komandon xargs ekzekuti eĥon , vi povas specifi kiom da dosiernomoj aŭ dosierujoj estas procesitaj per eĥo sur ĉiu ripeto kiel sekvas :

ls | xargs -n 5 eĥoj

En ĉi tiu kazo, eĥo ricevas kvin dosierojn aŭ dosierujnojn samtempe. Ekde eĥo aldonas novan linion de karaktero ĉe la fino, kvin nomoj estas skribitaj sur ĉiu linio.

Se vi plenumas komandon, kiu revenas grandajn kaj nediskuteblajn nombrojn (ekz. Dosiernomoj), kiuj estas transdonitaj al alia komando por plua prilaborado, estas bona ideo kontroli la maksimuman numeron de argumentoj, kiujn la dua komando ricevas por eviti superŝarĝi kaj frakasi.

La sekvanta komandlinio dividas la riveron de dosiernomoj produktitaj per serĉi int la grupojn de 200 antaŭ ol transskribitaj al la komando cp , kiuj kopias ilin al la kopia dosierujo.

trovi ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./ repo

La elemento "./" en la komando trovi specifas la nunan dosierujon por serĉado. La argumento "-type f" limigas la serĉon al dosieroj, kaj la "-nomo" * .txt "flagigas pluajn filtrilojn, kiuj ne havas" .txt "etendon. La -i flago en signoj xargs, kiuj la { } ( notacio , skribmaniero) reprezentas ĉiun dosiernomon de la vaporo.

La sekva komando trovas dosierojn nomatan kernon en aŭ sub la dosierujo / tmp kaj forĵetas ilin.

Trovu / tmp-nomo kerno -peco f -print | xargs / bin / rm -f

Rimarku, ke ĉi tio funkcios malĝuste se ekzistas iuj dosiernomoj kun novaj linioj, unuopaĵoj aŭ duoblaj citaĵoj aŭ spacoj. La sekva versio procesas la dosiernomojn tiel ke dosieroj aŭ dosierujoj enhavantaj unuajn aŭ duoblajn citaĵojn, spacojn aŭ novajn lineojn estas ĝuste manipulitaj.

Trovu / tmp-nomon kerno -peco f -print0 | xargs -0 / bin / rm -f

Anstataŭ la -i- opcio, vi ankaŭ povas uzi la -I flagon, kiu specifas la ĉenon, kiu anstataŭas la eniga linio en la komandaj argumentoj kiel en ĉi tiu ekzemplo:

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

La anstataŭiga ĉeno difinas kiel "{}". Ĉi tio signifas, ke iuj rimarkoj de "{}" en la komandaj argumentoj estas anstataŭigitaj per la eniga elemento sendita al args tra la pipe operacio. Ĉi tio ebligas al vi meti la enigajn elementojn en specifaj pozicioj en la argumentoj de la komando esti (ree) ekzekutitaj.