Példa Az "xargs" parancs használata

Leírás és Bevezetés

Az xargs parancsot tipikusan olyan parancssorban használják, ahol egy parancs kimenete bemeneti argumentumként átadódik egy másik parancsnak.

Sok esetben nincs szükség speciális parancsra, például xargsra, mivel a "csővezeték" és "átirányítás" operátorok ugyanolyan típusú tranzakciót hajtanak végre. Azonban néha vannak problémák az alapvető csővezeték- és átirányítási mechanizmussal, pl. Ha az érvek szóközöket tartalmaznak, akkor az xargs felülmúl.

Ezenkívül az xargs a megadott parancsot ismételten végrehajtja, ha szükséges, feldolgozza az összes megadott argumentumot. Valójában megadhatja, hogy hány argumentumot kell leolvasni a standard bemeneti adatfolyamról, amikor az xargs végrehajtja a megadott parancsot.

Általában az xargs parancsot kell használni, ha egy parancs kimenetét egy olyan második parancs opcióinak vagy argumentumainak részeként kell használni, amelyre az adatokat átirányítják (a "|" csővezérlő segítségével). Rendszeres csővezeték elegendő, ha az adatok a második parancs (standard) bemenete.

Ha például az ls parancsot használja a fájlnevek és könyvtárak listájának létrehozásához, majd ezt a listát az xargs parancs végrehajtó echo-ba , akkor megadhatja, hogy az egyes iterációk alapján mennyi fájlnevet vagy könyvtárnevet dolgozzon fel echo-val :

ls | xargs -n 5 echo

Ebben az esetben az echo öt fájlt vagy könyvtár nevet kap egyszerre. Mivel az echo egy új vonalat ad hozzá a végén, mindegyik soron öt nevet írunk.

Ha olyan parancsot futtat, amely nagy és kiszámíthatatlan számot (pl. Fájlnevet) ad át, amelyet további feldolgozásra továbbítanak egy másik parancsnak, jó ötlet, hogy szabályozza a második parancs által megkapott érvek maximális számát, hogy elkerülje a túlterhelést és összeomlást.

A következő parancssor a 200-as csoportok által létrehozott fájlnevek által generált fájlneveket osztja meg, mielőtt a cp parancsra átadta őket, és átmásolja őket a biztonsági könyvtárba.

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

A find parancsban található "./" elem a keresési aktuális könyvtárat adja meg. A "-type f" argumentum korlátozza a keresést a fájlokhoz, és a "-name" * .txt "jelző tovább kiszűri mindazokat, amelyek nem rendelkeznek" .txt "kiterjesztéssel. Az xargs -i flag jelzi, hogy a { } jelölés jelenti a gőz minden egyes fájlnevét.

A következő parancs a / tmp könyvtárban található vagy az alatt található fájlokat találja meg, és törli őket.

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

Ne feledje, hogy ez helytelenül működik, ha vannak olyan új fájlnevek, egysoros vagy kettős idézőjelek vagy szóközöket tartalmazó fájlnevek. A következő verzió a fájlneveket oly módon dolgozza fel, hogy az egyes vagy kettős idézőjeleket, szóközöket vagy új sorokat tartalmazó fájl- vagy könyvtárneveket megfelelően kezeljék.

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

Az -i opció helyett az -I jelzőt is használhatja, amely megadja azt a karakterláncot, amelyet az argumentum argumentumainak bemeneti sorával helyettesít, mint a jelen példában:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / kód>

A helyettesítő karakterlánc definíciója: "{}". Ez azt jelenti, hogy a parancselméletek "{}" minden előfordulását a bemeneti elem váltja fel a csővezeték műveletére. Ez lehetővé teszi a bemeneti elemek meghatározott pozíciókba történő helyezését a végrehajtandó (ismételten végrehajtandó) parancs argumentumaiban.