Bash Scriptlerinde basename Komutunu Kullanma

Bash scripting’te en yaygın görevlerden biri dosya yollarını manipüle etmektir—özellikle tam bir yoldan sadece dosya adını çıkarmak istediğinizde. İşte burada basename komutu devreye giriyor. Görünüşte basit olmasına rağmen, basename doğru kullanıldığında daha karmaşık scriptlerde, otomasyon araçlarında, hosting hizmetlerinde ve CI/CD ortamlarında güçlü kullanım senaryolarına sahiptir.

basename Nedir?

basename komutu dizin yolunu kaldırır ve isteğe bağlı olarak bir dosya uzantısını siler, geriye sadece temel adı (bir dosya yolunun son bileşeni) bırakır.

🔧 Temel Söz Dizimi:

basename [path] [suffix]

✅ Basit Örnekler:

basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf

Scriptlerde Neden basename Kullanmalıyız?

İşte gerçek dünya scripting ihtiyaçlarına dair birkaç örnek:

  • Günlük Kaydı: İşlenen bir günlük dosyasının adını çıkarın.

  • Arşivleme: Sadece dosya adını sıkıştırılmış bir arşive ekleyin.

  • Otomasyon: Dosya gruplarını işleyin ve çıktı dosya adları oluşturun.

  • Pipelines: CI/CD adımlarında dosya adlarını çıkarın.

Bash Scriptlerinde Pratik Kullanım Senaryoları

📁 1. Günlük Kaydı ile Dosyalar Üzerinde Döngü

for file in /var/log/*.log; do
name=$(basename "$file" .log)
echo "Processing $name"
# Add further commands like gzip "$file" or tail -n 100
done

Bu script .log dosyaları üzerinde döngü yapar, uzantısız adını çıkarır ve her eylemi kaydeder. basename dosya adlarıyla karmaşık dize dilimleme olmadan basit bir şekilde başa çıkmayı sağlar.

📂 2. Dinamik Dosya Yolları için basename Kullanma

Diyelim ki kullanıcı girdisinden veya başka bir süreçten tam yollar alıyorsunuz:

#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"

basename kullanmak, dinamik dosya yollarıyla çalışırken esneklik sağlar, özellikle günlükler, yapılandırma dosyaları ve yedeklerin farklı dizinlerde bulunabileceği bir Linux VPS ortamında. Bu, scriptinizi sağlam hale getirir, tam bir yol olan /var/log/syslog veya ./config.txt gibi bir göreli dosya geçilse bile.

🧪 3. basename’i dirname ile Birleştirme

Yol bileşenlerini izole etmek için birlikte kullanın:

#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"

basename ile Dosya Uzantılarını Kaldırma

Bilinen uzantıları kaldırmak istiyorsanız:

basename report-final.txt .txt

⚠️ Not: Bu yalnızca eklenti tam olarak eşleşiyorsa çalışır. Yani .txt çalışır, ancak .TXT veya .tar.gz çalışmaz, aksi takdirde açıkça belirtilmedikçe.

Birden fazla uzantı için, basename’i diğer araçlarla birleştirin:

file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archive

Veya:

filename=$(basename "${file%%.*}")

basename vs Parametre Genişletme

While basename sezgisel olsa da, bir alt süreç oluşturur. Performans açısından kritik scriptler veya büyük döngüler için saf Bash alternatiflerini tercih edin:

Bash Yerel Eşdeğeri:

file="/path/to/image.jpg"
filename="${file##*/}"
echo "$filename"
# Output: image.jpg

Yerel Bash ile uzantıyı kaldırın:

base="${filename%.*}"
echo "$base"
# Output: image

✅ Dış basename çağrısından daha hızlıdır.

Örnek: Dosyaları Toplu Olarak Yeniden Adlandırma

Diyelim ki tüm .jpg dosyalarının başına bugünün tarihini eklemek istiyorsunuz:


#!/bin/bash
prefix=$(date +%F)
for img in *.jpg; do
name=$(basename "$img")
mv "$img" "${prefix}_${name}"
done

Bu, orijinal adları korurken özel bir dize eklemek için basename kullanır.

Script Tanıtımları için basename “$0” Kullanın

echo "Running script: $(basename "$0")"

Tam yollar olmadan kullanıcı dostu çıktı veya günlükler yazdırmak için mükemmeldir.

basename komutu, shell scriptlerinde yol manipülasyonu için temel bir araçtır. İlk bakışta basit görünse de, döngüler, koşullu mantık ve günlük kaydı ile entegrasyonu, otomasyon ve sistem yöneticisi görevlerinde onu vazgeçilmez kılar.

Gelişmiş Bash scriptleri için, alt süreç çağrılarından kaynaklanan performans kayıplarını önlemek için parametre genişletmesini düşünün. Ancak netlik ve taşınabilirlik için—özellikle karışık Unix ortamlarında—basename güvenilir bir klasik olmaya devam etmektedir.