Bash desen eşleştirme, bir dizinden farklı dosya adları seçerken ve bir dizenin belirli bir formatla eşleşip eşleşmediğini kontrol ederken kullanışlı olan vazgeçilmez bir kavramdır.
Desen Eşleştirme
Bash temel olarak iki tür desen eşleştirme sunar: globs ve extended globs. İkisi, kullanıcıların dosya adlarını seçmeleri ve farklı dizeleri belirli kurallara göre kontrol etmeleri için basit yollar sunar. Ancak Bash, özellikle çeşitli kullanıcı girdilerini doğrulamak ve verileri ayrıştırmak için komut dosyalarıyla çalışırken normal ifadenin kullanılmasını da destekler.
1. Globs ile Bash Desen Eşleştirme
Glob düzeni eşleştirme, esas olarak belirli bir dizindeki belirli dosya adlarını kontrol etmeyi içerir. Bunlara joker karakterler denir. Üç tür bash glob deseni vardır:
2. yıldız işareti (*)
Sıfır veya daha fazla dosya adını eşleştirmek istediğinizde kullanılır.
Birkaç örnek verelim.
Belirli Bir Karakterle Başlayan veya Biten Dosya Adlarını Kontrol Etme
Örneğin, l veya li ile başlayan bir dosya aramamız gerekirse, aşağıdaki komutları kullanabiliriz:
ls l*
ls li*
Dizinler de dahil olmak üzere geçerli dizinde li veya l ile başlayan tüm dosya adlarıyla nasıl eşleştiğine dikkat edin.
Yalnızca dizinlerle eşleştirmek için, aşağıda gösterildiği gibi joker karakterden sonra / ekleyin:
Benzer şekilde, belirli bir karakter veya karakterlerle biten dosya adlarını eşleştirmemiz gerekirse, aşağıdaki resimde gösterildiği gibi joker karakteri kullanabiliriz. Bu örnekte, e ile biten dosya adlarını eşleştiriyoruz.
ls *e
Aramak istediğiniz dosya adından emin olmadığınızı ancak verilen karakterleri bildiğinizi varsayalım. Aşağıdaki örnekte olduğu gibi, karakterlerden önce ve sonra joker karakter ekleyerek dosya adlarını yine de eşleştirebilirsiniz.
Adlarında nux anahtar sözcüğünü içeren dosya adlarını eşleştirdik.
Belirli Bir Uzantıya Sahip Dosyaları Kontrol Etme
Bash desen eşleştirme ile belirli bir uzantıya sahip dosyaları bulabilirsiniz. Örneğin, tüm pdf’leri veya metin dosyalarını bulmak istiyorsanız. Bu durumda, joker karakteri dosya uzantısından önce eklersiniz. Tüm metin dosyalarını eşleştirmek için aşağıdaki örneği görelim:
ls*.txt
Tüm metin dosyaları aşağıda gösterildiği gibi eşleştirilir:
3. Soru işareti (?)
Soru işareti joker karakteri, tek bir karakterle eşleşen dosya adlarına işaret eder. Ancak, belirli bir dosya adının sahip olduğu karakter sayısını bilmelisiniz, öyle ki her bir “?” karakteri temsil eder.
Örneğin, bir dosya adını dört karakterle eşleştirmek için, ancak son karakteri biliyoruz, aşağıdaki örneğe sahip olabiliriz:
ls ???e
Benzer şekilde, dosya adının karakter sayısını bildiğiniz belirli bir uzantıyı bulmak için aşağıdaki komutu kullanabiliriz:
ls ?????.txt
4. Köşeli parantez []
Verilen karakterleri içeren dosya adlarını eşleştirmek gibi daha spesifik bir arama yapmak istediğinizde, eşleştirilecek karakterler köşeli parantez içinde eklenebilir.
Örneğin, uzantıdan bağımsız olarak belirtilen herhangi bir karakter veya sayı içeren dosya adlarını eşleştirmek için aşağıdaki komutu kullanabiliriz:
ls [e-m]*.*
Burada, e’den m’ye kadar herhangi bir karakter içeren ve herhangi bir uzantıya sahip dosya adlarını eşleştiriyoruz.
Belirli karakterlerle başlayan, diyelim ki [fl] ile başlayan ve belirli bir uzantıya sahip olan dosya adlarını eşleştirmek istiyorsanız, aşağıdaki kalıbı kullanabiliriz:
ls [f-l]*.txt*
5. Extended Globs ile Bash Desen Eşleştirme
Extended globs, normal ifadelere çok benzer. Ancak, varsayılan olarak kapalıdırlar. Bunları kullanmanız gerektiğinde, aşağıdaki komutu kullanarak açmanız gerekir:
$ shopt -s extglob
Extended glob şunları içerir:
6. ?(desenler)
Belirtilen desenin sıfır veya bir tekrarı ile eşleştirilirken kullanılır.
Örneğin, belirli bir uzantıya sahip tüm dosya adlarını veya adlarında belirli karakterler içerenleri eşleştirmek istiyorsanız, aşağıdaki komutu kullanabiliriz:
$ ls ?(*nux*|*.sh)
7. *(desenler)
Belirtilen desenin sıfır veya daha fazla tekrarı ile eşleştirilirken kullanılır.
Örneğin, sıfır veya daha fazla “f” ile başlayan ve metin dosyaları olan dosya adlarını eşleştirmek için aşağıdaki komutu kullanabiliriz:
$ ls *(f).txt
8. +(desenler)
Belirtilen desenin bir veya daha fazla tekrarı ile eşleştirilirken kullanılır.
Önceki komutu çalıştırırsak, bunun yalnızca en az bir “f” içermesi gereken dosya adlarıyla eşleştiğine dikkat edin; bu, .txt dosyasının eşleşmeyeceği anlamına gelir.
$ ls +(f).txt
9. @(desenler)
Belirtilen desenin bir tekrarı ile eşleştirilirken kullanılır.
Yalnızca bir “f” içeren dosya adlarını önceki örnekte kullanılanla aynı kalıbı kullanarak eşleştirmemiz gerekirse, aşağıda gösterildiği gibi @ kullanabiliriz:
$ ls @(f).txt
10. !(desenler)
Belirtilen kalıpla eşleşmeyen diğer her şeyi eşleştirmek istediğinizde kullanılır.
Belirtilen desene sahip olmayan tüm dosya adlarını eşleştirmek istediğimiz bir örneğimiz olsun. Bu örnekte, metin dosyaları veya Bash komut dosyaları olmayan tüm dosya adlarını eşleştiriyoruz. Komut aşağıdaki gibidir:
$ ls !(*.txt|*.sh)
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.