[linux-programlama] Re: İsim değiştirme

---------

From: Kenan Dogan (kndogan@yahoo.com)
Date: Sat 12 Jun 2004 - 19:13:06 EEST


> 200civarında farklı isimlerde resim dosyam var. bu dosyaların isimlerini
> resim1.jpg, resim2.jpg şeklinde bir bash scriptle nasıl değiştirebilirim

Once varsayimlar :

1. Butun dosyalar ayni dizin icinde bulunsunlar
2. Bu dizin icindeki dosyalarin tumunde isim degisikligi amaclaniyor olsun
3. Bu dosyalarin tumu zaten "jpg/JPG/Jpg,... v.b." uzantili olsun

Riskler : (Bilerek ya da istem disi karsilasilabilecek)

1. Dosyalarin arasinda zaten sizin istediginiz isim kalibina
    uyan (belki de gozunuzden kacmis) bazi dosyalar bulunabilir;
    bunlarin degistirilmesi gereksiz olabilecegi gibi, sakincali da
olabilir.
2. Islem herhangi bir nedenle yarida kesilirse, ikinci
    kez komutu calistirmak, ismi degismis dosyalarin
    ezilmesine neden olabilir (1nci maddeyle de ilintili)
3. Islem bitmis olsa bile, kaza eseri 2nci kez komutu
    calistirmak veya dizine ismi degisecek yeni dosyalarin
    katilmasi nedeniyle islemi tekrar etmek sorun yaratabilir.

Simdi "kabuk betigi" (shell script) :

(!! expr ifadelerindeki tek tirnaklarin "komut tirnagi" olusuna dikkat
!! )

1. Riskleri goz onunde bulundurmayan basit betik :

#! /bin/bash
say=0
for dosya in *.[jJ][pP][gG]
    do
       say=`expr $say + 1`
       mv $dosya resim$say.jpg
    done

2. Riskleri olabildigince eleyen denetimli betik :

#! /bin/bash
say=0
for dosya in *.[jJ][pP][gG]
    do
       dosya1=`expr substr "$dosya" 1 5`
       if [ "$dosya1" = "resim" ]
          then
             dosya2=`expr "$dosya" : ".....\([0-9]*\)"`
             uzunluk=`expr length "$dosya"`
             uzunluk1=`expr $uzunluk - 9`
             uzunluk2=`expr length "$dosya2"`
             if [ $uzunluk1 = $uzunluk2 ]
                then
                   continue
             fi
       fi
       say=`expr $say + 1`
       while [ -f "resim$say.jpg" ]
          do
             say=`expr $say + 1`
          done
       mv $dosya resim$say.jpg
       if [ $? = 0 ]
          then
             echo -e "$dosya \t ==> \t resim$say.jpg adini aldi."
       fi
    done

2nci betik ;

a)
resim7 dosyasina rastlarsa degistirmez.
resim7a dosyasina rastlarsa degistirir (en sonda rakam yok)
resimw8 dosyasina rastlarsa degistirir (arada "w" var)
resim8a1 dosyasina rastlarsa degistirir (arada "a" var)

b)
Onceki islem yarim kalmissa bastan calistirilabilir

c)
Sonradan araya baska (yeni) dosyalar katilmissa,
yeniden calistirilabilir

--!!--
Lutfen denemenizi dosyalarinizin asillari uzerinde degil,
kopyalari uzerinde yapiniz. Ben kendi kosullarimda denedim,
ama sizin ortaminizda herhangi bir nedenle farkli sonuclar
ortaya cikabilir.

Kolay gelsin.

        
                
__________________________________
Do you Yahoo!?
Friends. Fun. Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/


---------

Bu arsiv hypermail 2.1.7 tarafindan uretilmistir.