Linux Wildcard ve Globbing Açıklaması

Linux shell'inde wildcard karakterlerin ve globbing işleminin nasıl çalıştığını, hangi komutlarla kullanıldığını ve nasıl kontrol edileceğini detaylı olarak anlatır.

L
Linuxize
2 görüntülenme
Linux Wildcard ve Globbing Açıklaması

Giriş

Linux shell'inde wildcard karakterleri (* ? []) kullanarak dosya ve dizin ismi eşleştirme işlemi yapabilirsiniz. Bu işlem globbing olarak adlandırılır. Örneğin, rm *.log komutunu çalıştırdığınızda, shell önce * karakterini genişletir ve .log uzantılı tüm dosyaları listeler, ardından bu listeleri rm komutuna iletir.

Globbing İşlemi

Globbing, shell'in wildcard karakterleri içeren ifadeleri gerçek dosya ve dizin ismi listelerine dönüştürme işlemidir. Bu işlem komut çalıştırılmadan önce gerçekleşir. Örneğin, *, ? veya [...] karakterlerini içeren bir komut yazdığınızda, shell önce bu karakterleri genişletir ve ardından komutu çalıştırır.

Wildcard Karakterleri

  • *: Herhangi bir karakter dizisini temsil eder, boşluk da dahil.
  • ?: Tam olarak bir karakteri temsil eder.
  • [...]: Belirtilen karakter kümesinden bir karakteri temsil eder.

Örnekler

Tüm .txt uzantılı dosyaları listelemek için:

ls *.txt

Bir karakter içeren dosyaları listelemek için:

ls file?.log

Belirtilen karakterler ile başlayan dosyaları listelemek için:

ls [abc]*

Gizli Dosyalar ve Eşleşme Davranışı

Varsayılan olarak, * karakteri nokta ile başlayan gizli dosyaları eşleştirmez. Bu davranışı değiştirmek için shopt -s dotglob komutunu kullanabilirsiniz.

Eğer bir wildcard ifadesi hiçbir dosyaya eşleşmezse, shell bu ifadeyi doğrudan komuta iletir, bu da genellikle bir hata mesajına neden olur. Bu davranışı değiştirmek için shopt -s nullglob veya shopt -s failglob komutlarını kullanabilirsiniz.

Globbing ve Düzenli İfadeler Arası Fark

Globbing ve düzenli ifadeler farklı amaçlar için kullanılır. Globbing, dosya ve dizin ismi eşleştirme işlemi için kullanılırken, düzenli ifadeler metin içindeki eşleştirme işlemi için kullanılır.

POSIX Karakter Sınıfları

Globbing işlemi içinde, POSIX karakter sınıfları kullanabilirsiniz. Bu sınıflar, [[:class:]] formatında yazılır. Örneğin, [[:digit:]] bir rakam karakterini temsil eder.

Gelişmiş Globbing

Bash, shopt -s extglob komutu ile gelişmiş globbing özelliğini sunar. Bu özelliği kullanarak, daha karmaşık eşleştirme işlemleri yapabilirsiniz.

Genişleme Önleme

Eğer bir wildcard ifadesini doğrudan komuta iletmek istiyorsanız, bu ifadeyi tırnak içine almalısınız. Örneğin:

find . -name "*.log"

Hızlı Referans

Desen veya seçenek Anlamı
* Herhangi bir karakter dizisi, boşluk da dahil
? Tam olarak bir karakter
[abc] Belirtilen karakter kümesinden bir karakter
[a-z] Belirtilen aralık içindeki bir karakter
[!abc] Belirtilen karakter kümesinde olmayan bir karakter
[[:digit:]] POSIX sınıfından bir karakter
{a,b,c} Her bir listedeki karakter (brace genişleme)
{1..5} Belirtilen aralık içindeki her bir değer
!(pattern-list) Belirtilen desen dışındaki her şey, extglob etkinleştirildiğinde
shopt -s nullglob Eşleşmeyen bir desenin genişlemesini boşluk yapar
shopt -s failglob Eşleşmeyen bir desenin bir hata olarak ele alınmasını sağlar
shopt -s dotglob Wildcard eşleştirmelerine gizli dosyaları dahil eder

SSS

Wildcard ve globbing arasındaki fark nedir?
Wildcard, * veya ? gibi özel karakterlerdir. Globbing, shell'in bu karakterleri gerçek dosya ve dizin isimleri listelerine dönüştürme işlemidir.

Wildcard'ım hiçbirşey eşleştirmiyor veya bir hata oluşturuyor, neden?
Eğer hiçbir dosya eşleşmezse, shell bu ifadeyi doğrudan komuta iletir, bu da genellikle bir hata mesajına neden olur. Dosyaların varlığını kontrol edin veya shopt -s nullglob komutunu kullanın.

Shell globbing düzenli ifadeler ile aynı mı?
Hayır. Onlar aynı karakterleri kullanırlar ancak farklı anlamlara sahiptir: globbing'de * herhangi bir karakter dizisini temsil eder, düzenli ifadelerde * önceki karakterin sıfır veya daha fazla kez tekrarlandığını temsil eder.

* karakteri neden gizli dosyaları eşleştirmiyor?
Tasarım olarak, * karakteri nokta ile başlayan gizli dosyaları eşleştirmez, bu da normal listelerden gizli dosyaları çıkartır. Gizli dosyaları listelemek için ls -A komutunu kullanın veya shopt -s dotglob komutunu etkinleştirin.

Sonuç

Wildcard karakterleri ve globbing işlemi, Linux shell'inde dosya ve dizin isimleri ile çalışırken çok faydalıdır. Bu işlemi anlamak, komutların doğru şekilde çalışmasını sağlar ve potansiyel hataları önler. Wildcard karakterlerini düzenli ifadeler ile karıştırmayın, genişleme işlemlerini öncelikle kontrol edin ve gerektiğinde ifadeleri tırnak içine alın.

Kaynak

Linuxize