Programlama Rehberi

Perl İle Dizin İçi Arama İşlemleri




#!/usr/bin/perl -s
#     Author: Hamdi Kavak
#     Date : 06 December 2007 - 11:46 PM
#####################################################################################
#    - Program kullaniciya 4 islem secenegi sunuyor ve secilen islemi bulunulan dizinden baslayarak tum dizinler icinde yer alan dosyalar icin deniyor.
#    - Program degistirerek dizin icinde yer alan dosyalar uzerinde toplu halde islemler yapabilirsiniz
#####################################################################################
    

###--- Moduller ----###
use Cwd;

###--- Ana Program ---###
print &cwd." uzerinde bulunuyorsunuz";  #cvd modulu bulundugunuz dizinin yol adresini verir
print "Bulundugum dizin ve altindaki dizinlerde bulunan dosyalar uzerinde ne tur bir islem gerceklestirmek istiyorsunuz? ";
print    "1. Hepsini kucuk harfe donustur ".
        "2. Hepsini buyuk harfe donustur ".
        "3. Dosya adi ara(regular expression kullanabilirsiniz) ".
        "4. Dosya icerisinde bir ifade ara(regular expression kullanabilirsiniz) ";
       
my $selection = <STDIN>; my $svalue;
chomp $selection;
if($selection==1 || $selection==2){
    $valid=true;
}
elsif($selection==3){
    print "Lutfen dosya adinda aramak istediginiz ifadeyi giriniz ";
    $svalue = <STDIN>;
    chomp $svalue;
    $valid=true;
}
elsif($selection==4){
    print "Lutfen dosya icinde aramak istediginiz ifadeyi giriniz ";
    $svalue = <STDIN>;
    chomp $svalue;
    $valid=true;
}
else{
    print "Yanlis secim yaptiniz. ";
    $valid=false;
}
if($valid){
    print "Dizin tarama basliyor ... ";
    &ScanDirectory(".",$selection,$svalue); # kendi yazdigimiz bu alt ilk parametrede programin calistirildigi dizinin adresini gonderdik
    print " ... bitti. ";
}
else{
    die "Program kapaniyor...";
}

###--- Alt-Programlar(subroutines) ---###
sub ScanDirectory{
    my ($workdir) = shift; #get first value from @_ which keeps passed arguments
    print "$workdir uzerinde tarama basladi ";
    my $selection = shift;
    my $svalue = shift;
    my ($startdir) = &cwd; # basladıgımız dizin
    my $found = 0;
    chdir($workdir) or die "$workdir dizinine girilemedi:$! "; # parametre olarak gonderilen dizini sec
    opendir(DIR, ".") or die "$workdir dizini acilamadi:$! "; # parametre olarak gonderilen dizine gir
    my @names = readdir(DIR) or die "$workdir dizini okunamadi:$! "; # parametre olarak gonderilen dizindeki tum baglantilari(dosyala isimlerini) oku
    closedir(DIR); # parametre olarak gonderilen dizini kapat

    foreach my $name (@names){ # okunan isimleri birer birer kontrol et
        next if ($name eq "."); # okunan isim bulundugumuz dizine isaret ediyorsa atla
        next if ($name eq ".."); # okunan isim bir ust dizine isaret ediyorsa atla

        if (-d $name) {# okunan isim dizin isaret ediyorsa
            print "Yeni dizin ismi => $name ";
            ### RECURSION(ozyinelemeli olarak yeni dizin cagriliyor) ###
            &ScanDirectory($name,$selection,$svalue);            
            print "$name dizinini tarama islemi bitti ";
            next; # daha alt kisma inmeye gerek yok foreachin basina don
        }
        if($selection==1) {
            $old = $name;
            $name =~ tr/A-Z/a-z/; # ismi kucuk harfe donustur
            rename($old,$name) || die "$old ismi $name ile degistirilemiyor: $!"; #dosya ismini kucuk harflerle yeniden adlandir
        }
        elsif($selection==2){
            $old = $name;
            $name =~ tr/a-z/A-Z/; # ismi buyuk harfe donustur
            rename($old,$name) || die "$old ismi $name ile degistirilemiyor: $!"; #dosya ismini buyuk harflerle yeniden adlandir
        }
        elsif($selection==3)  {
            $_ = $name;
            if (/$svalue/){# aranan degerle mevcut dosya ismini regular expression ile karsilastiriyorum
                print "$workdir! uzerinde 1 tane bulundu ";
                print " - $name (bu dosya ismi $svalue ifadesi ile eslenmistir )";
            }
        }
        elsif($selection==4) {
            open( FILE,$name) || die("Dosya acilamiyor : $!"); # dosyayi ac
            $found = 0;# bu degisken kac tane eslesme oldugunu tutacak
            while( <FILE> ) {    
                if(/$svalue/){    
                    $found++;
                }
            }
            if($found > 0)    {
                print "$workdir! uzerinde 1 dosyada aranan ifade bulundu ";
                print " - $name (Ifade : $svalue bu dosya icinde $found kez bulunmustur.) ";
            }
        }
    }
     chdir($startdir) or die "$startdir dizinine gecis yapilamiyor:$! "; # tum ozyinelemeli alt-programlar cagirildiginda bu satir sayesinde basladigimiz dizine doneriz
}
Yazar: Hamdi
Kategori: Perl / CGI
Düzey: Düzey
Eklenme Tarihi: 2007-11-07
Okunma: 479
Puan: 0
Yorum sayisi: 0

Yorumlarınız(0)




2004-2009 © Programlama Rehberi, tüm hakları saklıdır.