sala@home:~$

xargs

A korábban már említett find parancs segítségével adott tulajdonságú fájlokat kereshetünk. Többnyire persze nemcsak megkeresni szeretnénk a fájlokat, hanem valami műveletet elvégezni velük. Ilyenkor az xargs parancsot használhatjuk, ami a standard inputról kapott paraméterek felhasználásával végrehajt egy előre meghatározott parancsot. Nézzünk egy egyszerű példát. Keressük meg az alkönyvtárban található txt kiterjesztésű fájlokat:

[]$ find . -name "*.txt"
 ./a.txt
 ./b.txt
 ./c.txt

Vizsgáljuk meg, hogy melyik txt fájlban található meg az alma sztring:

[]$ find . -name "*.txt" | xargs grep alma
 ./a.txt:alma

A fenti utasítás hatására xargs a következő parancsot futtatja:

[]$ grep alma ./a.txt ./b.txt ./c.txt
 ./a.txt:alma

Tegyük fel, hogy továbbra is a txt fájlokat keressük és a

basename

paranccsal le szeretnénk vágni az alkönyvtár nevét, mert csak a fájl nevére vagyunk kíváncsiak. Ha a fentieknek megfelelően a

find . -name "*.txt" | xargs basename

paranccsal próbálkozunk, akkor hibaüzenetet kapunk, hiszen basename nem tud mit kezdeni az egyszerre paraméterként megkapott három fájlnévvel. Ehelyett arra van szükségünk, hogy xargs a 3 fájlnevet egyenként adja át. Ezt a következőképpen érhetjük el:

find . -name "*.txt" | xargs -n1 basename
 a.txt
 b.txt
 c.txt

A -n kapcsolóval azt állíthatjuk be, hogy a standard inputon érkezett argumentumokat hányasával használja fel xargs. Az esetek többségében ( ha egyáltalán szükségünk van a kapcsolóra ) azt szeretnénk, ha egyesével használnánk fel őket, ezért használtam itt is -n1-et.