Bash ile tr ve rg Kullanarak Dosya İsimlerini Düzenleme
Bu makalede, Bash betiği kullanarak dosya isimlerini düzenleyen bir fonksiyon oluşturacağız. Amacımız, bir dizindeki dosya isimlerini belli kurallar çerçevesinde değiştirmek: büyük harfleri küçük harfe çevirmek, Türkçe karakterleri İngilizce karşılıklarıyla değiştirmek ve boşlukları ya da alt çizgileri (_
) kısa çizgilere (-
) dönüştürmek. Aşağıdaki kod bu işlemi gerçekleştiren bir Bash betiğidir ve her adımı detaylıca inceleyeceğiz.
Betik Kodu
#!usr/bin/bash
for i in $(rg --files); do
new=$(echo "$i" | tr "[:upper:]" "[:lower:]" | tr " " "-" | tr "_" "-" | tr "ı" "i" | tr "ş" "s" | tr "ğ" "g" | tr "ü" "u" | tr "ö" "o" | tr "ç" "c" )
echo "$new"
mv "$i" "$new"
echo "Rename: '$i' -> '$new' "
done
Satır Satır Açıklama
1. #!usr/bin/bash
Bu satır, betiğin Bash shell altında çalıştırılacağını belirtir. Doğru bir şekilde çalışması için #!/usr/bin/bash
olarak düzeltilmesi gerekir. Bu satır "shebang" olarak bilinir ve betiğin hangi yorumlayıcı ile çalıştırılacağını belirler.
2. for i in $(rg --files); do
Bu satır, dizindeki tüm dosya isimlerini bir döngü ile işler.
rg --files
:ripgrep
(rg
) aracını kullanarak mevcut dizindeki tüm dosyaları listeler. Bu,ls
veyafind
komutlarına göre daha hızlı ve esnek bir alternatiftir.for i in $(rg --files)
: Listelenen dosyaların her biri için bir döngü başlatılır ve her dosya ismii
değişkenine atanır.
3. new=$(...)
Bu satırda, dosya ismi düzenleme işlemleri yapılır ve yeni dosya ismi new
değişkenine atanır. İçeride yapılan işlemler şunlardır:
echo "$i"
: Mevcut dosya ismini alır ve işlenmek üzereecho
ile çıktı olarak gönderir.tr "[:upper:]" "[:lower:]"
: Büyük harfleri küçük harfe çevirir.tr " " "-"
: Dosya isimlerindeki boşluk karakterlerini kısa çizgilere (-
) dönüştürür.tr "_" "-"
: Alt çizgileri (_
) kısa çizgilere (-
) dönüştürür.tr "ı" "i" | tr "ş" "s" | tr "ğ" "g" | tr "ü" "u" | tr "ö" "o" | tr "ç" "c"
: Türkçe karakterleri İngilizce karşılıklarına dönüştürür.
Bu işlemlerin tamamı bir zincir halinde çalıştırılarak dosya ismi tamamen dönüştürülür.
4. echo "$new"
Bu satır, dönüştürülmüş yeni dosya ismini terminalde gösterir. Bu, işlem adımlarını kontrol etmek için faydalıdır.
5. mv "$i" "$new"
Bu komut, eski dosya ismini ($i
) yeni dosya ismiyle ($new
) değiştirir.
mv
: Dosya veya dizin taşımak/yeniden adlandırmak için kullanılır.
6. echo "Rename: '$i' -> '$new'"
Bu satır, eski ve yeni dosya isimlerini göstererek kullanıcıya yapılan değişikliği bildirir. Çıktı şu şekilde görünür:
Rename: 'eski-dosya-adi.txt' -> 'yeni-dosya-adi.txt'
7. done
Bu satır döngünün sonunu belirtir. Tüm dosyalar sırasıyla işlenir ve betik tamamlanır.
Örnek Çıktı
Bir dizinde aşağıdaki dosyalar olduğunu varsayalım:
Dosya Adı 1.txt
İçerik_dosyaŞ.txt
örnek-Görsel.png
Betiği çalıştırdıktan sonra dosyalar şu şekilde yeniden adlandırılır:
dosya-adi-1.txt
icerik-dosyas.txt
ornek-gorsel.png
Terminal çıktısı şu şekilde görünecektir:
dosya-adi-1.txt
Rename: 'Dosya Adı 1.txt' -> 'dosya-adi-1.txt'
icerik-dosyas.txt
Rename: 'İçerik_dosyaŞ.txt' -> 'icerik-dosyas.txt'
ornek-gorsel.png
Rename: 'örnek-Görsel.png' -> 'ornek-gorsel.png'
Avantajlar
- Otomasyon: Dosya isimlerini elle değiştirmek yerine hızlı ve güvenilir bir yöntem sunar.
- Türkçe Karakter Dönüşümü: Türkçe karakterleri otomatik olarak İngilizce karakterlere çevirir.
- Standardizasyon: Boşlukları, alt çizgileri ve büyük harfleri düzenleyerek tutarlı dosya isimleri oluşturur.
Geliştirme Fikirleri
- Hata Kontrolü: Aynı isimde bir dosya varsa üzerine yazmayı önlemek için ek kontroller yapılabilir.
- Seçici İşlem: Belirli dosya türlerini hedeflemek için
rg
veya başka bir filtreleme komutu kullanılabilir. - Yedekleme: Dosya isimlerini değiştirmeden önce bir yedekleme mekanizması eklenebilir.
Bu basit betikle, dizindeki dosya isimlerinizi standart bir formata kolayca dönüştürebilir ve zaman kazanabilirsiniz.