Giriiş:
Bash'te dosyalarla çalışırken sıklıkla dosya adını uzantısından ayırmanız gerekebilir. Yaygın bir yaklaşım 'kes' komutunu kullanır, ancak bu yöntem birden çok nokta içeren dosya adlarında başarısız olabilir.
Örneğin, "a.b.js" gibi bir dosya adı, "a.b" ve "js" yerine hatalı bir şekilde "a" ve "b.js"ye bölünür. Python `os.path.splitext()` ile kolay bir çözüm sunsa da Python kullanmak her zaman en verimli seçenek olmayabilir. Bu makale Bash'te bu görevi gerçekleştirmek için daha iyi yöntemleri araştırıyor.
Emretmek | Tanım |
---|---|
${variable%.*} | Bir dosya adından uzantıyı kaldırmak için parametre genişletme. |
${variable##*.} | Uzantıyı bir dosya adından çıkarmak için parametre genişletme. |
awk -F. | Alan ayırıcıyı, dosya adını bölmek için kullanılan bir noktaya ayarlar. |
OFS="." | Awk'daki çıktı alanı ayırıcısı, dosya adını uzantısız olarak yeniden oluşturmak için kullanılır. |
NF-- | Uzantıyı etkili bir şekilde kaldırarak awk'de alan sayısını birer azaltır. |
${BASH_REMATCH} | Bash'teki normal ifadedeki eşleşmeleri tutan dizi. |
local variable | Bash'teki bir işlev içinde yerel kapsama sahip bir değişken bildirir. |
Bash Çözümlerinin Ayrıntılı Dağılımı
Sağlanan komut dosyaları, Bash'te bir dosya adını ve uzantısını ayırmak için çeşitli yöntemler sunar. İlk komut dosyası Bash parametre genişletmesini kullanır. Değişken ${FILE%.*} dizenin son noktasından sonuna kadar her şeyi çıkararak uzantıyı kaldırır; ${FILE##*.} son periyottan sonra her şeyi alarak uzatmayı yakalar. Bu yöntem çoğu dosya adı yapısı için basit ve etkilidir. İkinci komut dosyası şunları kullanır: awkUnix benzeri ortamlarda güçlü bir metin işleme aracıdır. Alan ayırıcıyı bir noktaya ayarlayarak -F.dosya adını parçalara bölmeye olanak tanır. Çıkış alanı ayırıcısı, OFS="."ve alanların sayısını azaltmak NF-- dosya adını uzantısı olmadan yeniden birleştirme teknikleridir.
Üçüncü komut dosyası Bash'te düzenli ifadeler kullanır ve bu ifadelerden yararlanır. ${BASH_REMATCH} normal ifade eşleşmesindeki grupları yakalamak için. Bu komut dosyası, dosya adını iki gruba ayıran bir kalıp kullanır: biri temel ad için, diğeri uzantı için. Son olarak, özel işlev komut dosyası, parametre genişletme mantığını bir işlev içinde kapsülleyerek kodun yeniden kullanılabilirliğini ve okunabilirliğini artırır. Kullanır local variable değişkenleri işlev kapsamında tutmaya yönelik bildirimler, daha büyük komut dosyalarında istenmeyen yan etkileri önler. Her yöntem, aynı sorunu çözmeye yönelik farklı bir yaklaşım sergileyerek Bash komut dosyası yazmanın çok yönlülüğünü ve gücünü ortaya koyar.
Bash'te Parametre Genişletmeyi Kullanma
Bash komut dosyası oluşturma
#!/bin/bash
# Script to extract filename and extension using parameter expansion
FILE="a.b.js"
FILENAME="${FILE%.*}"
EXTENSION="${FILE##*.}"
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
Dosya Adı ve Uzantıyı Ayırmak için Awk Kullanma
Awk ile Bash
#!/bin/bash
# Script to extract filename and extension using awk
FILE="a.b.js"
FILENAME=$(echo "$FILE" | awk -F. '{OFS="."; NF--; print $0}')
EXTENSION=$(echo "$FILE" | awk -F. '{print $NF}')
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
Bash'te Normal İfadeleri Kullanmak
Regex ile Bash komut dosyası oluşturma
#!/bin/bash
# Script to extract filename and extension using regex
FILE="a.b.js"
[[ "$FILE" =~ (.*)\.(.*) ]]
FILENAME=${BASH_REMATCH[1]}
EXTENSION=${BASH_REMATCH[2]}
echo "Filename: $FILENAME"
echo "Extension: $EXTENSION"
Bash'te Özel İşlev Kullanma
Özel işlevli Bash komut dosyası oluşturma
#!/bin/bash
# Function to extract filename and extension
extract_filename_extension() {
local file="$1"
echo "Filename: ${file%.*}"
echo "Extension: ${file##*.}"
}
# Call the function with a file
extract_filename_extension "a.b.js"
Bash'te Dosya İşleme için Alternatif Yöntemleri Keşfetmek
Halihazırda tartışılan yöntemlerin ötesinde, Bash'te dosya adlarını ve uzantılarını değiştirmek için başka yararlı teknikler de vardır. Böyle bir yöntem, aşağıdakilerin kullanılmasını içerir: basename Ve dirname komutlar. basename dosya adını bir yoldan çıkarmak için kullanılabilirken, dirname dizin yolunu alır. Bu komutları parametre genişletmeyle birleştirmek, dosya adlarını ve uzantıları etkili bir şekilde ayırabilir. Örneğin, kullanarak basename "$FILE" ".${FILE##*.}" uzantıyı dosya adından kaldırır. Bu yaklaşım, yalnızca dosya adları yerine tam dosya yollarıyla çalışırken özellikle kullanışlıdır.
Başka bir yöntem kullanmayı içerir sed, metni filtrelemek ve dönüştürmek için güçlü bir akış düzenleyicisidir. Uygun düzenli ifadeler oluşturarak, sed dosya adını ve uzantısını izole edebilir. Örneğin, komut echo "$FILE" | sed 's/\(.*\)\.\(.*\)/\1 \2/' dosya adını ve uzantıyı bölerek bunları ayrı yakalama gruplarına yerleştirir. Bu teknik esnektir ve karmaşık dosya adı yapılarını işleyebilir. Bu ek araçları ve yöntemleri keşfetmek, Bash'te dosya verilerini işleme yeteneğinizi genişleterek çeşitli komut dosyası senaryoları için sağlam çözümler sunar.
Bash Dosyası İşleme Hakkında Sıkça Sorulan Sorular
- Amacı nedir? ${FILE%.*} emretmek?
- Son noktadan sonra her şeyi çıkararak uzantıyı dosya adından kaldırır.
- Nasıl olur ${FILE##*.} komuta işi?
- Dosya adındaki son noktadan sonraki her şeyi alarak uzantıyı çıkarır.
- Nedir awk -F. sağlanan komut dosyasında bunu yapın?
- Alan ayırıcıyı bir noktaya ayarlayarak dosya adının parçalara bölünmesine olanak tanır.
- Neden kullanılmalı? NF-- bir şekilde awk senaryo?
- Alan sayısını birer birer azaltarak uzantıyı dosya adından etkili bir şekilde kaldırır.
- Düzenli ifadeler dosya adının ve uzantısının çıkarılmasına nasıl yardımcı olur?
- Dosya adının farklı bölümlerini izole edebilen desen eşleştirme ve gruplamaya izin verirler.
- Bash'te özel bir işlev kullanmanın faydası nedir?
- Özel bir işlev, kodun yeniden kullanılabilirliğini ve okunabilirliğini geliştirerek komut dosyalarını daha modüler hale getirir.
- Nasıl basename dosya adları konusunda yardım?
- İsteğe bağlı olarak uzantıyı kaldırarak dosya adını tam dosya yolundan çıkarır.
- Olabilmek sed dosya adı manipülasyonu için kullanılabilir mi?
- Evet, sed dosya adlarının bazı kısımlarını dönüştürmek ve ayırmak için normal ifadeleri kullanabilir.
Dosya Adı ve Uzantı Çıkarma Çözümlerini Tamamlama
Sonuç olarak, Bash'te dosya adlarının ve uzantıların çıkarılması, her biri farklı ihtiyaçlara ve tercihlere uygun olan çeşitli yöntemlerle etkili bir şekilde gerçekleştirilebilir. Parametre genişletme, awk, sed veya özel işlevler kullanılsa da bu teknikler esnek ve etkili çözümler sunar. Bu komutları anlamak ve kullanmak, komut dosyalarının birden çok noktaya sahip dosya adlarını ve diğer karmaşıklıkları hatasız olarak işleyebilmesini sağlar.