Takip et

Bash: How to Find All Files that Start with Specific Pattern (Çeviri)

# Bash ile Belirli Kalıpla Başlayan Tüm Dosyaları Bulma

Bir Linux sisteminde yüzlerce, belki binlerce dosya arasında belirli bir kalıpla başlayanları bulmanız gerektiğini düşünün. Bu, büyük bir projede çalışırken, belirli bir tarihteki yedek dosyalarını bulmak veya belirli bir türdeki log dosyalarını ayıklamak gibi birçok durumda çok önemlidir. Bu makalede, Bash komut satırı aracılığıyla bu işlemi nasıl gerçekleştireceğinizi, temel seviyeden ileri seviyeye kadar adım adım öğreneceksiniz.

Öğrenme Yol Haritası

Bu makale, Bash’te dosya bulma konusunda yeteneklerinizi kademeli olarak geliştirmenizi sağlayacak bir yol haritası sunmaktadır:

Yeni Başlayan: Temel find komutu kullanımı ve basit örnekler.

Orta Seviye: Gerçek dünya senaryoları, find komutunun gelişmiş seçenekleri ve performans optimizasyonu ipuçları.

İleri Seviye: Performans analizi, karmaşık kalıp eşleştirmeleri ve beklenmedik durumların (edge case) ele alınması.

Bash Temelleri: find Komutu

find komutu, dosya sisteminde dosya ve dizinleri aramak için kullanılan güçlü bir araçtır. Temel kullanım şekli oldukça basittir:

find [başlangıç_dizin] [seçenekler] [eşleşme_kalıbı]

* başlangıç_dizin: Aramanın başlayacağı dizin. Nokta (.) ile mevcut dizini belirtebilirsiniz.
* seçenekler: Aramayı özelleştirmek için kullanılan seçenekler (örneğin, -name, -type, -print).
* eşleşme_kalıbı: Aranacak dosya veya dizinlerin adı veya özellikleri.

Örneğin, mevcut dizindeki tüm .txt dosyalarını bulmak için:

find . -name "*.txt" -print

Bu komut, mevcut dizin (.), alt dizinleri ve dosyaları tarar ve adları .txt ile biten tüm dosyaları ekrana basar (-print).

Nasıl Tüm Dosyaları Belirli Bir Kalıpla Başlayan Dosyaları Bulurum?

Belirli bir kalıpla başlayan dosyaları bulmak için find komutunun -name seçeneğini ve kabuk kalıpları (shell globbing) kullanırız. Örneğin, “log_” ile başlayan tüm dosyaları bulmak için:

find . -name "log_*" -print

Bu komut, log_ ile başlayıp herhangi bir karakterle devam eden tüm dosyaları bulur. Yıldız işareti (*), sıfır veya daha fazla karakteri temsil eder.

Gerçek Dünya Örneği: Log Dosyalarının Yönetimi

Bir web sunucusunun log dosyalarını yönettiğinizi ve son 24 saat içinde oluşturulmuş tüm “error_” ile başlayan log dosyalarını bulmanız gerektiğini varsayalım. Bu durumda, find komutunu -mtime seçeneği ile birlikte kullanabiliriz:

find . -name "error_*" -mtime -1 -print

-mtime -1, son 24 saat içinde değiştirilmiş dosyaları bulur. Bu komut, son 24 saat içinde oluşturulmuş veya değiştirilmiş “error_” ile başlayan tüm log dosyalarını listeler.

find Komutunun Gelişmiş Seçenekleri: -type ve -exec

find komutu, dosya türünü filtrelemek için -type seçeneğini ve bulduğu dosyalarda komut çalıştırmak için -exec seçeneğini sunar.

Örneğin, sadece dizinleri bulmak için:

find . -type d -print

Bulunan dosyaları silmek için (dikkatli olun!):

find . -name "log_*" -exec rm {} \;

{}, find komutunun bulduğu her dosya için yerine konur ve ;, -exec bloğunu sonlandırır. Bu komutu çalıştırmadan önce, yedekleme yapmanız veya komutu dikkatlice test etmeniz önerilir.

Performans Optimizasyonu: -prune Seçeneği

Çok büyük dizinlerde arama yaparken, performansı artırmak için -prune seçeneğini kullanabilirsiniz. Bu seçenek, belirli dizinlerin aranmasını engeller. Örneğin, .git dizinini aramadan hariç tutmak için:

find . -path "./.git" -prune -o -name "log_*" -print

Bu komut, .git dizinini atlar (-prune) ve diğer tüm dizinlerde “log_” ile başlayan dosyaları arar (-o, “veya” anlamına gelir).

İleri Düzey: Regex ile Kalıp Eşleştirme

Daha karmaşık kalıp eşleştirmeleri için, -regex seçeneği ve düzenli ifadeler (regular expressions) kullanılabilir. Örneğin, “log_” ile başlayan ve “.txt” ile biten dosyaları bulmak için:

find . -regex ".*log_[^/]*\.txt$" -print

Bu komut, düzenli ifade kullanarak daha hassas bir arama yapar. Düzenli ifadeler, karmaşık kalıp eşleştirmeleri için güçlü bir araçtır, ancak öğrenme eğrisi biraz daha diktir.

Vaka Analizi: Büyük Bir Proje Dizini

100 GB’lık bir proje dizininde, “backup_” ile başlayan ve son 7 gün içinde oluşturulmuş tüm yedek dosyalarını bulmanız gerekiyor. Bu durumda, find komutunu -mtime, -name ve -print0 seçenekleriyle birlikte kullanarak performansı optimize edebiliriz:

find . -name "backup_*" -mtime -7 -print0 | xargs -0 ls -l

-print0, dosya adlarını null karakterle ayırır ve xargs -0, bu null karakterlerle ayrılmış dosya adlarını ls -l komutuna güvenli bir şekilde iletir. Bu yöntem, dosya adlarında boşluk veya özel karakterler olsa bile doğru çalışır.

Sıkça Sorulan Sorular (SSS)

1. find komutu çok yavaş çalışıyor, ne yapabilirim? -prune seçeneğini kullanarak gereksiz dizinleri atlayabilir, -type ile dosya türünü filtreleyebilir veya -mtime ile arama kapsamını daraltabilirsiniz. Ayrıca, find komutunu xargs ile birleştirerek performansı artırabilirsiniz.

2. find komutu hata veriyor, neden? Hata mesajını dikkatlice inceleyin ve hangi dizinde hata oluştuğunu belirleyin. Dosya izinleri, dizin yapısı veya komutun yanlış kullanımı hata nedeni olabilir.

3. Bulunan dosyaları başka bir dizine taşımak istiyorum. find komutunu -exec mv {} /hedef/dizin/ \; ile kullanabilirsiniz. /hedef/dizin/ yerine hedef dizinin yolunu yazmalısınız.

4. Düzenli ifadeleri nasıl kullanırım? Düzenli ifadeler karmaşıktır, ancak güçlüdür. man find komutuyla -regex seçeneğinin kullanımını ve düzenli ifade sözdizimini inceleyebilirsiniz. [Fatih Soysal’ın web sitesi](https://fatihsoysal.com) (buraya ilgili bir makale eklenebilirse harika olur) düzenli ifadeler hakkında daha fazla bilgi sunabilir.

5. find komutunun tüm seçeneklerini nasıl öğrenebilirim? man find komutunu çalıştırın. Bu, find komutunun tüm seçenekleri ve kullanım örnekleriyle ilgili kapsamlı bir belge sağlayacaktır.

Sonuç

Bu makale, Bash’te find komutu kullanarak belirli bir kalıpla başlayan dosyaları bulmanın farklı yollarını adım adım açıkladı. Temel kullanımdan ileri düzey tekniklere kadar geniş bir yelpazede örnekler verildi ve performans optimizasyonu için ipuçları paylaşıldı. Unutmayın, find komutu, Linux sistemlerinde dosya yönetiminin temel taşlarından biridir ve bu komutu etkin bir şekilde kullanmak, verimliliğinizi önemli ölçüde artıracaktır.

Yazar: Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.