xargs
xargs komutu ile bir komuttan gelen standart çıktıyı başka bir komuta argüman olarak yönlendirebilirsiniz.
Örneğin bir dizindeki (ve alt dizinlerindeki) Python dosyalarının kaçar satırdan oluştuğunu görmek istersek
Gördüğünüz gibi burada sondaki satır total değerini veriyor, Bu aslında wc
programının bir özelliği, en sonda kendisine argüman olarak verilen bütün dosyaların satır sayılarının toplamını da verir. Örneğin şöyle bir kullanım yapsaydık da çalışacaktı, ama alt dizinleri aramayacaktı.
İçindeki boşluk karakteri geçen dosya isimlerinin kullanılabilmesi için find programı -print0 argümanı ile çalıştırılmalı ve xargs programı ile -0 argümanı kullanılmalıdır.
Argümanların Farklı Yere Yerleştirilmesi
Farkındaysanız xargs'ın yaptığı, standart girdiden gelenleri ilgili komutun sonuna yerleştirmek oldu. Ancak bazı durumlarda gelenleri sona değil, başka bir yere yerleştirmek isteyebiliriz. Aşağıdaki örnek açıklayıcı olacaktır.
Yukarıda -I argümanından sonra % kullandığımız için, komut içerisinde % görünen yere standart girdiden gelen konulacaktı. Örneğin % yerine gelen yazabilirdik.
Argümanları Gruplandırmak
Bazı programlar bütün argümanları aldığında işe yaramazlar çünkü sınırlı sayıda argüman ile çalışırlar. Örneğin diff programı sadece iki dosya ismini argüman olarak alır ve bunları karşılaştırır. Öyleyse onlarca dosyayı diff ile kullanmak için, xargs'e argümanları gruplandırmasını söylememiz gerekir.
Yukarıdaki işlemin yaptığı, gelen ls çıktısını 2'li gruplar halinde diff programına sunmak olduk. Böylece diff önce test2.txt ve test3.txt dosyalarını karşılaştırıyor, ardından test4.txt ve test.txt dosyalarını karşılaştırıyor.
Benzer şekilde sadece çıktıyı gruplandırmak isteseydik, -n argümanını kullanabilirdik.
Maksimum Argüman Sayısı
Kabuk ortamınızda kullanabileceğiniz maksimum argüman sayısı sisteminize göre değişiklik gösterebilir. Aşağıdaki komutu yazarak öğrenebilirsiniz.
Öte yandan xargs kendi limitlerine sahiptir. Bu limit normalde 4096 olarak belirlenmiştir ancak parametre kullanımıyla aşılabilir. -s parametersiyle bu limiti dilediğiniz sayıya (sistem limitleriniz dahilinde olmak şartıyla) çekebilirsiniz. Böylece, örneğin çok sayıda dosyanın bulunduğu dizinleri tararken limitlere takılmazsınız.
Yukarıdaki komut, /mnt/backup
dizini hariç bütün dizinlerde jpg ve jpeg uzantılı (büyük/küçük harf duyarsız) dosyaları /mnt/backup
dizinine kopyalar.
Last updated