Voorbeeld Gebruik van die "xargs" opdrag

Beskrywing en Inleiding

Die xargs- opdrag word tipies in 'n opdraglyn gebruik waar die uitset van een opdrag oorgedra word as invoer argumente na 'n ander opdrag.

In baie gevalle is geen spesiale opdrag soos xargs nodig om dit te bereik nie, aangesien die "pyp" en "redirection" -operateurs dieselfde tipe transaksie uitvoer. Soms is daar egter probleme met die basiese pyp- en omleidingsmeganisme, byvoorbeeld, indien argumente spasies bevat, wat xargs oorwin.

Daarbenewens voer xargs die gespesifiseerde opdrag herhaaldelik uit, indien nodig, al die argumente wat daaraan gegee word, te verwerk. Trouens, jy kan spesifiseer hoeveel argumente die standaardinvoerstroom moet aflees elke keer as die xargs die gespesifiseerde opdrag uitvoer.

Oor die algemeen moet die xargs-bevel gebruik word as die uitset van een opdrag gebruik moet word as deel van die opsies of argumente van 'n tweede opdrag waarop die data gestroom word (met die pypoperateur "|"). Gereelde pype is voldoende as die data beoog om die (standaard) invoer van die tweede opdrag te wees.

As u byvoorbeeld die ls- opdrag gebruik om 'n lys van lêername en dopgehou te genereer, en dan hierdie lys in die xargs-bevel wat echo uitvoer, kan u spesifiseer hoeveel lêername of katalogusname soos volg op elke herhaling verwerk word. :

ls | xargs -n 5 echo

In hierdie geval ontvang echo vyf lêer- of gidsname op 'n keer. Aangesien echo 'n nuwe lyn karakter aan die einde voeg, word vyf name op elke lyn geskryf.

As u 'n opdrag uitvoer wat 'n groot en onvoorspelbare aantal items (bv. Lêername) oplewer wat na 'n ander opdrag oorgedra word vir verdere verwerking, is dit 'n goeie idee om die maksimum aantal argumente wat die tweede opdrag ontvang om te verhoed dat oorlaai en gekraak word, te beheer.

Die volgende opdraglyn partisies die stroom van die lêername wat deur die groepe van 200 gevind word, het voorheen oorgedra na die cp- opdrag, wat hulle kopieer na die rugsteungids .

vind. / -type f-naam "* .txt" -print | xargs -200 - i cp -f (). / backup

Die element "./" in die vindopdrag spesifiseer die huidige gids vir soek. Die "-type f" -argument beperk die soektog na lêers, en die "-name" * .txt "-vlag filter verder enigiets wat nie 'n" .txt "uitbreiding het nie. Die -i vlag in xargs dui aan dat die { } notasie verteenwoordig elke lêernaam van die stoom.

Die volgende opdrag vind lêers met die naam kern in of onder die gids / tmp en verwyder dit.

vind / tmp-naam kern-tipe f -print | xargs / bin / rm -f

Let daarop dat dit verkeerd sal werk as daar lêername is wat nuwe lyne bevat, enkel of dubbel aanhalings of spasies. Die volgende weergawe verwerk die lêername op so 'n manier dat die lêer of gidsname wat enkel of dubbel aanhalingstekens, spasies of nuwe lyne bevat, korrek hanteer word.

vind / tmp-naam kern-tipe f -print0 | xargs -0 / bin / rm -f

In plaas van die -i opsie kan jy ook die -I vlag gebruik wat die string spesifiseer wat vervang word deur die invoer lyn in die bevel argumente soos in hierdie voorbeeld:

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

Die vervangingstring word gedefinieer as "{}". Dit beteken dat enige gebeurtenisse van "{}" in die bevelargumente vervang word deur die insetelement wat deur die pypoperasie na args gestuur word. Dit stel u in staat om die insette elemente op spesifieke posisies in die argumente van die opdrag te plaas om (herhaaldelik) uitgevoer te word.