Pythontr

husonet | Tarih: 29.12.2014

find xargs linux komut satırı

Arama yap bul ve ardından çalıştırabileceğimiz bir komut satırı argumanını inceleyelim.

Konunun daha iyi anlaşılması için örneklemeler yapacağım. İlk senaryomuz da kullanıcı dizinimizde yer alan tüm yedekleme ("*~") dosyalarını silelim.


find /home/huso -name *~ |xargs rm 

Verdiğimiz örnek aslında oldukça iyi çalışıyor fakat bazı hedeflenen yedekleme dosyaları gerçekten silinmez bunlar;


  • Sembolik bağlantılı bir alt dizindeki yedekleme dosyaları.
  • Dosya adı veya yol adında boşluk olan yedekleme dosyaları.

Buna ek olarak, Xargs komutu zayıf sıfır argüman işler. Hiçbir eşleme find komutu ile bulunamazsa, Xargs hemen sona erdirmek için akıllı değildir, ama yine de bir şekilde hedef komutunu (rm) yürütmek için çalışacağız.


Örn:
find /home/huso -name bla_bla_bla* |xargs rm
rm: missing operand

Sembolik Linkler

find komutu varsayılan olarak sembolik linkleri takip etmez, sembolik bağlantıları takip edebilmeniz için -L parametresini kullanmanız gerekir.


Örn:
find -L /home/huso -name *~ |xargs rm

Boşluklu isimler
find /home/huso -name dd* | xargs rm
rm: cannot remove ‘/home/huso/Downloads/dd’: No such file or directory
rm: cannot remove ‘deneme.pdf’: No such file or directory

Xargs boşluklar (ve yenisatırlar) da girdi argümanlarını böler. Bir dosya adı (veya path adı) içinde boşluklar varsa, Xargs bunu yanlış yorumlar ve birden fazla dosya var olduğunu düşünür olacaktır Örn: "dd deneme.pdf".


Çözüm -0 parametresinde yatar. -0 (sıfır) parametresidir.
find /home/huso -name dd* -print0 | xargs -0 rm

Zero parametresi

xargs -r parametresi ile kullanın. Eğer stdin boşsa, Xargs komutu çalışmaz ve çıkış sağlamaz.


Örnek olarak kullanacağınız komut aşağıdaki gibidir.
find -L /home/huso/Downloads -name dd* -print0 |xargs -0 -r rm