Foarbyld fan 'e "xargs" kommando

Beskriuwing en yntroduksje

It kommando xargs wurdt typysk brûkt yn in kommando-rigel wêrtroch de útfier fan ien kommando oerjûn wurdt as input arguments nei in oar kommando.

Yn in soad gefallen is gjin spesjale kommando lykas xargs nedich om dit te meitsjen, om't de "pipe" en "omdraaie" operators itselde type transaksje útfiere. Dochs binne der soms problemen mei de basis piping en omlaatmechanik, bygelyks as arguminten romten befetsje, dy't xargs oerwinne.

Dêrneist útfiert xargs it opjûne kommando hieltyd wer as it nedich is om alle arguminten te behertigjen. Yn feite kinne jo bepale hoefolle arguminten elke kear de standert-ynput-stream lêze wurde moat de xargs it bepaalde kommando útfiere.

Yn it algemien moat it kommando xargs brûkt wurde as de útfier fan ien kommando wurde brûkt as in part fan de opsjes of arguminten fan in twadde kommando wêrmei de gegevens streamd binne (mei de pipeoperator "|"). Regelmjittige piping is genôch as de gegevens bedoeld binne de (standert) ynfier fan it twadde kommando.

As jo ​​bygelyks it kommando ls brûke om in list mei triemnammen en mappen te meitsjen en dizze list yn it kommando xargs út te fieren, kinne jo oantsjutte hoefolle triemnammen of triemnammen wurde ferwurke troch echo op elke hierearing as folget :

ls | xargs -n 5 echo

Yn dit gefal ûntfynt echo fiif bestannen of triemnammen op ien kear. Om't echo oan 'e ein in nij-line-karakter tafoege, wurde fiif nammen op elk line skreaun.

As jo ​​in kommando útfiere dat in grutte en unfoarspelbere getal items weromfine (bygelyks triemnammen) dy't trochgean nei in oar kommando foar fierdere ferwurkjen is it in goeie idee om it maksimale oantal arguminten te behearjen dat it twadde kommandem ûntfangt om oerlêst te meitsjen en te ferbrekken.

De folgjende kommandorigel ferhellet de stream fan triemnammen dy't makke wurde troch yn ' e groepen fan 200 finen te finen foardat se oergean nei it cp kommando, dat kopiesert nei it backup- triemtafel.

sykje ./ -type f -namme "* .txt" -print | xargs -l200 -i cp -f {} ./backup

It elemint "./" yn it befestigingsfinster befettet it aktive triemtafel foar sykjen. It argument "-type f" beheine it sykjen nei triemmen, en de flagge "-name" * .txt "filtert alles wat gjin" .txt "-útwreiding hat. De -i flagge yn xargs soarget dat de { } notaasje jout elke triemnamme fan de stoom.

It kommende kommando befettet triemmen dy 't kearn yn of ûnder de triemtype / tmp neamd hawwe en wiske.

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

Tink derom dat dit falsk wurket as der gjin filenames binne mei nije linen, ien of dûbele quotes, of spaces. De folgjende ferzje ferwurket de filenames op sadanich dat triem of directorynammen mei ien of dûbele sifers, romten of nije linen befetsje.

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

Ynstee fan 'e -e- opsje kinne jo ek de -I- flagge brûke dy't de string bepaald dat dat ferfongen wurdt troch de ynfierline yn' e kommando-arguminten lykas yn dit foarbyld:

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

De ferfangende string is definiearre as "{}". Dit betsjut dat alle occurrences fan "{}" yn de kommando arguminten ferfangen wurde troch it ynfier-elemint nei args troch de pylke operaasje ferwidere. Dit soarget dat jo de ynput-eleminten op spesifike posysjes pleatse yn de arguminten fan it kommando om (werhelle) útfierd wurde te kinnen.