Saturday, 22 October 2011

Bash ile Birçok Dosyanın İsmini Değiştirmek


Eğer bash kullanıyorsanız ve birçok dosyanın ismini bir komut ile değiştirmek istiyorsanız farklı farklı  ihtiyaçlarınız olabilir. Burada sadece bul/değiştir (find/replace) ile yapılabilecek tekniği göstermeye çalışacağım.

Bir kaç gün önce bir klasör altındaki bir çok dosyanın ismini değiştirmem gerekti. Gereklilik bul/değiştir (find/replace) gibi olsa çok hoş olurdu. Araştırmalarım sonucunda aşağıdaki gibi bir örneğe ulaştım.


for i in *; do j=`echo $i | sed 's/find/replace/g'`; mv "$i" "$j"; done

Kısım kısım ele alalım; 

for i in *;

Bu satır bulunduğunuz klasör altındaki tüm dosyalara işlemi yapacağınızı gösteriyor. Örneğin sadece txt uzantılı dosyalara işlem uygulayacaksanız

for i in *.txt; 

şeklinde olması gerekir. 

do j=`echo $i | sed 's/find/replace/g'`;

Aranacak ve yerine yapıştırılacak bilgiyi yukarıdaki satırda belirliyorsunuz. Satırdaki 'find' yazan yere aranacak yazıyı, 'replace' yazan yere de yerine yapıştırılacak yazıyı yazmanız gerekir. 

mv "$i" "$j"; done

Yukarıdaki satırda da kalsik 'mv' komutu kullanılarak eski dosya ismi ile yeni dosya ismi değiştirilmektedir. 

Sonuç olarak dikkat edilmesi gereken iki nokta var. Birincisi '*' karakterinin gerekiyorsa modifiye edilmesi, ikincisi ile aranacak ve yerine yapıştırılacak yazıların eklenmesi. 

Kendi örneğimden konuşacak olursam tüm dosyalarımın içindeki '_a' yazısını '_c' ile değiştirmem gerekiyordu. 

for i in *; do j=`echo $i | sed 's/_a/_c/g'`; mv "$i" "$j"; done

Yukarıdaki kullanım tam istediğim sonucu almama neden oldu. 

Değerli dosyalarınıza uygulamadan önce ya bir yedeğini alın ya da başka dosyalar üzerinde deneyerek gerçekten istediğiniz sonucu aldığınızdan emin olun ve sonra işlemi yapın. Sonra çok üzülmek olası ;) 

Volkan Özyılmaz

No comments:

Post a Comment