Ubuntu Türkiye

Yazılım => Programlama => Kabuk (sh,bash,*csh,ksh,zsh) => Konuyu başlatan: bilge - 14 Temmuz 2009 - 17:58:28

Başlık: [Çözüldü] Dosyanın İsmini Değiştirmek
Gönderen: bilge - 14 Temmuz 2009 - 17:58:28
Merhaba arkadaşlar,
Bir betik yazdım fakat çalıştırdığımda bir sonuç alamadım.Problemim şu; konsola betik_adı dosya1 dosya2 şeklinde yazıcam.o klasörde bulunan dosya1 dosya2 nin sonuna belirtilen bir ekleme yapılacak.Örneğin ben dosyaların sonuna .txt eklenmesini istedim,bana onları ekleyip vericek.Betiğim şu şekilde;

echo "$# parametre var"
echo "Dosya isimleri: $1 $2"
echo "İstenilen uzantı: $3"
echo "Yeni dosya isimleri:"
`rename "s/$1 $2/\ $1 $2.$3/"`
exit

Zannedersem "rename" satırında hata var.Ama neden kaynaklandığını çözemedim.Yardımlarınızı bekliyorum.
   
Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bytan - 14 Temmuz 2009 - 20:11:01
İstediğin farklı yöntemlerle yapılabilir. Aşağıdakini dene bakalım işine yarayacak mı?

#!/bin/bash
echo "$# parametre var"
echo "Dosya isimleri: $1 $2"
echo "İstenilen uzantı: $3"
echo "Yeni dosya isimleri:"
mv $1 $1.$3
mv $2 $2.$3
echo $1.$3 $2.$3
exit 0
Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bilge - 15 Temmuz 2009 - 09:03:46
Aslında tam olarak yapmaya çalıştığım öyle değil.Yani ben bir çok dosyada değişiklik yapabilirim.İlk başta 2 sonra 3.Yani dosya sayıları belli olmadığı için mv $1 $1.$3 şeklindeki bir kullanımda doğru olmaz diye düşünüyorum.Bunu for döngüsüyle yapmam gerekicek,

Yani şu şekilde herhalde:

echo "$# parametre girdiniz."
echo "Eklemek istediginiz formatı giriniz: $1"     //Kaç tane dosyanın ekleniceğini bilmediğim için eklenmek isteneni ilk sıraya koydum.İlk parametrede o olduğu için diğer parametreler 2'den başlıyacak.

i=$#-1
i=2
for i in ($#)-1     //zannedersem burada yazımda bir yanlışlık var.Girilen parametre sayısından biri uzantı olduğundan diğerleri de dosyalardır.

mv ($i $i+1 şi+2.....).$1 şeklinde bir şey olamaz mı?

Umarım anlatabilmişimdir.Yardımlarınızı bekliyorum.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 15 Temmuz 2009 - 12:06:28

Arkadaşlar böyle bir şey yaptım değişik olarak,ama yine hata alıyorum :(..


echo "İstenilen uzantı: $1"
i=2
for i in `expr $# - 1` ;
   do
        mv $i $i.$1
        i=`expr ${i} + 1`
   done
exit
Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bytan - 15 Temmuz 2009 - 12:59:04
Öncelikle parametreleri bir dizi (array) içine kaydettim. Aşağıdaki gibi dene, ufak tefek kısımlarını kendine göre değiştirirsin:


#!/bin/bash
N=$#

a=1;
for p in "$@";
    do
dizi[$a]="$p";
a=$(($a+1));
done

echo "dosya isimleri...."

for i in  $(seq 1 1 $(($N-1)))
do
echo ${dizi[$i]};
done

echo "istenilen uzanti:";

echo ${dizi[$N]}

echo "Yeni Dosya isimleri:";

for i in  $(seq 1 1 $(($N-1)))
do
mv ${dizi[$i]} ${dizi[$i]}.${dizi[$N]};
echo ${dizi[$i]}.${dizi[$N]};
done

exit 0


Aslında bu işlemleri daha basit yapmanın da yolları var. Örneğin betiğini:

betik.sh -d dosya1 dosya2 -e istenilen_uzanti

şeklinde çalışması için ayarlarsan, hem görünüşü güzel olur hem de istenilen uzantının mecburi olarak son parametre olarak girilmek gibi bir durumu olmaz.
Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bilge - 15 Temmuz 2009 - 13:16:04
Ben de o şekilde yapmak istiyorum.Terminale  betik.sh dosya_biçimi dosya1 dosya2 .....  şeklinde yazim,o yazdığım dosyaları değiştirsin.
Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bytan - 15 Temmuz 2009 - 13:25:14
Bash programalama işini en başından alarak başlarsan, senin için daha iyi olur.  Gerçi insan önüne bir hedef koymadan da olmuyor. :) Neyse ki her taraf geniş kaynaklarla dolu. "Bash +parameters" aramasıyla çok sonuç elde edebilirsin. Örnek olarak işine yarayacağını düşündüğüm bir link:

http://www.ibm.com/developerworks/linux/library/l-bash-parameters.html#N100D2
Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bilge - 15 Temmuz 2009 - 13:45:33
Yok o zaten hedefimdi.O yüzden bu örneklerle uğraşıyorum.Kendimi betik yazmakta geliştirmek için.Ben de Bash Beginners Guide ile çalışıyorum.Önerin için teşekkür ederim.O kaynağa da bir bakim.

Bir de Beginners Guide'de bunun için shift komutunu önermişler.Bunun hakkında bilginiz var mı?
Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bytan - 15 Temmuz 2009 - 14:18:49
Shift ile sağdaki parametrenin değeri soldaki parametreye aktarılabilir. Sağdakinin değeri ise, kendisinin sağındaki parametrenin değeri olur.

Başlık: Ynt: Dosyanın İsmini Değiştirmek
Gönderen: bilge - 15 Temmuz 2009 - 14:26:19
Evet shift ile hallettim sonunda =)..

Betiğin son hali şöyle;

a="txt"
a=$1
shift
while (("$#")); do
mv ${1} ${1}.${a}
shift
done


Yardımlarınız için teşekkür ederim.Sizi de baya uğraştırdım.
Başlık: Ynt: [Çözüldü] Dosyanın İsmini Değiştirmek
Gönderen: bytan - 15 Temmuz 2009 - 14:30:20
Uzantıyı başa alınca, shift ile daha güzel olmuş.

Madem etiketledin, kapatalım. :)