“xargs” Komutu ve Kullanımı

xargs bir kez alıştığınızda sürekli kullanacağınız, özellikle script yazımında işinizi oldukça pratik hale getirecek komutlardan biri. Fonksiyon olarak öncesinde kullanılan komutun çıktısını bir sonraki komuta iletme işlemini sağlayan xargs pipe kullanımıyla da özdeş kabul edilebilir. Ancak işlevsel farklılıkları nedeniyle kullanım ihtiyaçlarına göre değerlendirilmeleri gerekir. Bir örnekle anlatmak gerekirse;

echo 1 2 3 | xargs echo "Sayılar:"

Yukarıdaki komut pipe öncesinde echo ile yazdırdığımız 1 2 3 sayısını başında Sayılar: olacak şekilde sunacaktır. Kod içerisindeki xargs kaldırıldığında alacağımız dönüş sadece “Sayılar” olacaktır. Tarih üzerinden örneği yeniden kurgulayalım:

date | xargs echo "Tarih:"

Tekrar sayılara dönelim be echo ile belirttiğimiz sayıların her bir bir satırda sunulacak şekilde uygulayalım.

echo 1 2 3 | xargs -n 1

Şimdi de örnek içerisinde echo ile belirtilen sayıların toplamını alalım.

echo 1 2 3 | xargs | tr ' ' '+' | bc -l

Yoğunlukla script içerisinde kullanımlarına denk gelebileceğiniz xargs find ile dosya işlemleri konusunda hızlı çözümler (isim değiştirme, silme, yetki düzenleme vs.) sunabilmektedir. Bir kaç örnekle konuyu detaylandıralım.

İlk örneğimiz *.log uzantılı dosyalar içerisinde, içeriğinde belirttiğimiz kelimenin geçtiği satırları listelemek olsun.

find . -name '*.log' | xargs grep 'Salary'

Yukarıdaki örneği biraz değiştirelim ve bu defa klasör içeriğindeki *.log uzantılı dosyaların silinmesini sağlayalım. Silme işleminin dikkali bir şekilde kullanılması gerektiğini unutmayın.

find . -name "*.log" | xargs rm -rf

Örnekleri birlikte değerlendirerek içeriğinde belirli bir kelimenin geçiği dosyaları silebilirsiniz. Find ile ilgili yetkilendirmelerden bahsettiğim kullanıcı erişimi ve yetki aramaları başlıklı yazıda da yer verdiği -mtime ile arama-silme işlemini zaman sınırlandırması içerisinde gerçekleştirebilirsiniz.

find . -mtime +10 | xargs rm

Silme işleminin spesifik olarak find komutuyla kullanılabileceği gibi bir kural olduğunu düşünmemeniz adına alternatif kullanımlara da değinmek istiyorum. İlk komutumuz bulunulan dizindeki tüm dosya ve klasörleri silecektir.

ls | xargs rm -rf

Bir diğer komutumuz ise dosyaları listeleyip, adında “apache” geçen dosyaları silecektir.

ls | grep "apache" | xargs rm

Peki, silme işleminin doğru bir şekilde gerçekleştiğinden nasıl emin olacaksınız? -p opsiyonu ile son örneğimiz üzerinden bir işlem gerçekleştirelim o halde.

ls | grep "apache" | xargs -p rm

Yukarıdaki komut belirtilen argümanla eşleşen durumlar için her defasında onay (y/yes) isteyerek ilerleyecektir. Daha kapsamlı ve döngüsel işlemler için saurorja.org > Basic Mathematics from shell command line yazısını inceleyebilir, detaylı kullanıma dair bilgiler için man xargs komutunu kullanabilirsiniz.

Leave a Reply