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.