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