Salı, Kasım 09, 2010

Linux'ta dosya içindeki metne göre arayıp silmek

for dosya in $(find /hangi/klasorde/aranacaksa -type f -name "*" | xargs grep -l 'Aranan metin');

do

echo $dosya
rm $dosya

done
Bir klasörde binlerce dosya var. (Bir mail bombasının ardından birbirine karışmış gerçek mailler ile bomba mailler örneğin :) ) Aralarından içindeki bir metne göre ayıklayıp o dosyaları silmek istiyoruz. Buyrun size basit bir script.

find /hangi/klasorde/aranacaksa -type f -name "*" | xargs grep -l 'Aranan metin'

find komutu ile hangi klasörde aradığımızı, -type paramatresi ile f (file) dosya olduğunu, ayrıca dosya adı için de * ile tüm dosyaları belirttik. (* terine *.php gibi sadece belli unantılar vs. seçilebilir. Arama işlemini kısaltır bu sayede) Sonra xargs ile tüm dosya içeriklerini tek tek kontrol ettik ki içindeki metini grep ile ayıklayalım.
Sonrası dosyaları tek tek döngüye alıp sırayla silmek. Bir de silinen dosyaları ekranda görüyoruz ki yanlışlık olmasın :)