Konuyu Açan #1
Find ile veri çıktısını işleme

Günlükler arasında zar gıdası gibi susamış bir sorun: belirli bir klasördeki dosya adlarını, uzantılarını ve içeriklerini tek adımda nasıl filtreleyip, çıktıdan anlamlı veriler çıkarmak gerekir?


  • Amaç ve sınırlar: find komutu sadece dosya arama için değil, çıktı akışını başka komutlara boru (pipe) ile aktarmak için güçlü bir zincir kurar. Örneğin tarih, boyut, tür gibi kriterlerle daraltma yapıp, sonucunu xargs veya while döngüsüyle işleyebiliriz.
  • Temel desen: find /hedef/klasor -type f -name "*.log" -mtime -7 -print
    Bu temel biçim, son 7 gün içinde değiştirilmiş .log uzantılı dosyaları listeler. Burada -type f dosya, -mtime zaman kriteri, -print çıktı verir.
  • Çıktıyı filtrelemek: Örnek olarak dosya adlarını sadece isim olarak almak için -printf kullanabiliriz:
    find /var/log -type f -name "*.log" -printf "%f\n"
    Burada %f dosya adını, yeni satırla çıktı verir.
  • İçerik üzerinde arama: Dosya içeriğini taramak için find ile birlikte xargs veya -exec kullanabiliriz.
    Örnek: find . -type f -name "*.txt" -exec grep -Hni "kullanıcı" {} +
    Bu, her bulunan dosyada "kullanıcı" kelimesini arar ve dosya adı ile eşleşen satırları gösterir.
  • Birleşik çıktı formları: Dosya boyutu ve yoluyla birlikte çıktı almak isterseniz:
    find /home -type f -name "*.csv" -printf "%p\t%s bytes\t%kKB\n"
    Bu format, yol, boyut ve yaklaşık bellek etkisini tek satırda gösterir.
  • İşleme için ileri düzey filtreler: -links, -perm, -newer dosyalarıyla kombinasyon kurabilir, çıktı akışını awk ile işleyebiliriz.
    Örnek:
    find . -type f -name "*.log" -size +"1M" -print0 | xargs -0 -I {} bash -c 'echo "Dosya: {}"; wc -l < {}'
    Bu, 1MB'den büyük log dosyalarının satır sayısını verir.
  • Güvenlik ve performans: -print0 ile boşluklu dosya adlarını güvenli şekilde işlemek, -exec ... + ile çok sayıda dosyada da performanslı işlem sağlar.


[quote]Özetle:
  • find ile hedefleri netleştirmek için -type, -name, -mtime gibi kriterleri kullanın.
  • Çıktıyı yönlendirmek için -print veya -printf, çıktı akışını başka komutlara boru ile bağlamak için pipe veya -exec kullanın.
  • İçerik tarama için grep veya awk gibi araçlarla birleşik iş akılları kurun.
  • Büyük hacimde dosya ile çalışırken -print0 ve xargs -0 kombinasyonları güvenli ve hızlı çözümler sunar.


Bu konudaki özel senaryonuz nedir? Hangi dizinde, hangi dosya tiplerini, hangi metin kalıplarını veya hangi çıktıyı elde etmek istiyorsunuz? Her adımı ihtiyaçlarınıza göre uyarlayalım.

Yanıt vermek için giriş yapmış olmalısınız.

Bu konuyu görüntüleyen kullanıcılar (Toplam: 3, Üyeler: 3, Misafirler: 0)
Toplam: 3 (üyeler: 3, misafirler: 0)
0 alıntı seçildi