gokayburuc.dev

Bash ile Dosya İsimlerini Otomatik Normalize Etme

Bash ile Dosya İsimlerini Otomatik Normalize Etme

Projelerde, depo yapılarında veya kişisel çalışma dizinlerinde zamanla tutarsız dosya adları birikmesi kaçınılmazdır. Büyük ve küçük harf uyumsuzlukları, boşluklu veya alt çizgili dosya adları, Türkçe karakterler ya da sistemler arası taşınabilirliği bozan isimler; otomasyon süreçlerini, terminal komutlarını ve sürüm kontrol sistemlerini doğrudan etkiler. Bu nedenle dosya isimlerinin standart hâle getirilmesi, özellikle büyük ölçekli projelerde önemli bir ihtiyaçtır.

Bu yazıda, bir dizindeki tüm dosyaları otomatik olarak normalize eden bir Bash script’ini ele alacağız. Script hem güvenli hem de hızlı şekilde çalışacak biçimde tasarlanmıştır. Ayrıca her satırının ne yaptığını ayrıntılı biçimde açıklayarak betiğin mantığını tamamen anlaşılır hâle getirdik.


Amaç

Hazırlanan script’in temel amacı, dizindeki dosya adlarını tutarlı ve taşınabilir bir forma dönüştürmektir. Script şu işlemleri otomatik olarak gerçekleştirir:

Bu sayede tüm dosyalar hem tutarlı hem de komut satırı ve sürüm kontrol sistemleri için ideal bir formata kavuşur.


Script

Aşağıdaki Bash script’i, dizinde bulunan tüm dosya isimlerini normalize edecek şekilde yapılandırılmıştır:

#!/usr/bin/env bash

rg --files | while IFS= read -r file; do
    new=$(echo "$file" \
        | sed \
            -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' \
            -e 's/[ _]/-/g' \
            -e 'y/ışğüöç/isguoc/' )

    # Değişiklik yoksa atla
    if [[ "$file" == "$new" ]]; then
        continue
    fi

    # Çakışma kontrolü
    if [[ -e "$new" ]]; then
        echo "Hedef dosya zaten mevcut, atlanıyor: $new"
        continue
    fi

    echo "Rename: '$file' -> '$new'"
    mv -- "$file" "$new"
done

Satır Satır Açıklama

Aşağıda script’in tüm bileşenleri detaylı şekilde incelenmiştir.

Shebang

#!/usr/bin/env bash

Script’in Bash ile çalıştırılmasını sağlar. /usr/bin/env kullanımı farklı sistemlerde daha yüksek uyumluluk sunar.


Dosyaların listelenmesi ve güvenli okunması

rg --files | while IFS= read -r file; do

Dosya adının normalize edilmesi

new=$(echo "$file" \
    | sed \
        -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' \
        -e 's/[ _]/-/g' \
        -e 'y/ışğüöç/isguoc/' )

Bu blok üç dönüşümü tek bir sed zincirinde uygular:

Dönüşüm sonucu new değişkenine yazılır.


Gereksiz işlemlerin atlanması

if [[ "$file" == "$new" ]]; then
    continue
fi

Eğer dönüşüm sonucunda dosya adı değişmemişse rename edilmesine gerek yoktur. Script bir sonraki dosyaya geçer.


Çakışma kontrolü

if [[ -e "$new" ]]; then
    echo "Hedef dosya zaten mevcut, atlanıyor: $new"
    continue
fi

Yeni isim zaten mevcutsa:


Yeniden adlandırma

echo "Rename: '$file' -> '$new'"
mv -- "$file" "$new"

Sonuç

Bu script, karmaşık dosya adlarını düzenli ve uyumlu bir standarda dönüştürmek için güçlü bir otomasyon sunar. Büyük projelerde klasör yapılarını sadeleştirmek, arama ve filtrelemeyi kolaylaştırmak, terminal bazlı iş akışlarını hatasız hâle getirmek için pratik bir çözümdür.

#bash #obsidian