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
}