xargs
-
unixlerde ozellikle script yazarken işe yarayan, bir komutun çıktısını başka bir komuta efendi bir şekilde iletmekte etmekte kullanılan ingiliz anahtarı. neden doğrudan pipe etmiyoruz diye soranlar için her zaman her komutu bir diğer komutla kullanmak mümkün olmayabilir.
bir örnekle anlatacak olursak
find . -name "*tmp" -print | xargs rm
komutu varsayalım 100 bin milyon temp dosyası olan bir dizinde zorunlu olarak kullanılacaktı. çünkü basit rm *tmp komutu çalışma esnasında rm ye argument olarak bir seferde uzun bir liste olarak sunulmaya çalışılacak bu da too many arguments benzeri bir hataya neden olacaktı. yada hadi varsayalım 100 bin milyon dosya olmasın silinebilir çoklukta 100 bin bin dosya olsun. bu durumda terbiyesiz rm komutu tabir yerindeyse hepsini bir anda silmeye çalışacak, yaptığı pis disk iosuyla, açgöz çocuklarınların ağızlarına herşeyi doldurup boğulayazması gibi sunucuda gereksiz tansiyona neden olacaktır. ancak en yukardaki komutla çocuğumuza sadece yiyebileceği kadar kurabiye sunarken yavaş yavaş yedirip yarasın tosunuma deme şansımız olacaktır. * -
-
guvenli degildir. diyelim 2 dosyaniz var:
a b c d.txt
e f g h.txt
ls | xargs rm
dediginiz anda
rm a b c d.txt e f g h.txt
seklinde 8 dosya silinmeye calisilacaktir.
nasil yapsak daha guvenli olur derseniz
find ./* -print0 | xargs -0 rm
iyidir. find'deki -print0 sirf xargs icin yaratilmistir, ayip etmeyin kullanmayarak. -
find ile guzel bir ikili olusturuyor. iyi komut-kotu komut. saka saka: iyi komut-iyi komut. "komut" da nasil tuhaf bi kelimeymis yahu, yeni fark ettim. nohut.
ilave: uzerine (yanina) grep de iyi gider. -
kendisiyle ilgili en sevdigim ozelligi -i parametresi oldu dun itibariyle. positional placement yapabiliyor {} kullanarak:
# date | xargs echo "normalde sona gelir:"
normalde sona gelir: fri nov 7 03:27:11 utc 2014
# date | xargs -i echo "buraya gelecek: {}, sona gelmeyecek:"
buraya gelecek: fri nov 7 03:27:16 utc 2014, sona gelmeyecek:
gnu utils'teki versiyonunda var yalniz bu, bsd versiyonlarinda (ornek os x) bulunmaz.
ekşi sözlük kullanıcılarıyla mesajlaşmak ve yazdıkları entry'leri
takip etmek için giriş yapmalısın.
hesabın var mı? giriş yap