find
komutu ile dosya ve dizin aramaları yapılabilir. Kullanılacak parametreler sayesinde bir dosya araması yaparken çok yardımcı olabilecek bir komuttur. Adım adım kullanımına bu yazıda bakacağız.
Temel komut yapısı:
find [dizin yolu] [parametreler] [aranacak ifade]
En basit kullanımından başlayalım ve sonra parametre girerek komutun işleyişine bakalım.
find
komutunu bulunduğunuz dizinde direkt çalıştırırsanız, bulunduğunuz dizinde bulunan dosya ve dizinleri gösterir.
Hedef yol gösterilerek de arama yapılabilir. /home/salih dizininde iken Masaüstü dizininde arama yapalım.
Şimdi gelelim isim olarak dosya aramaya. Dosya ismiyle arama yapabilmek için -name
parametresi kullanılır.
find -name [aranacak dosya adı]
Örnek olarak /home/salih dizininde iken deneme isimli dosyayı aratacağım. find -name deneme
Görüldüğü üzere deneme isimli dosya Masaüstü dizinindeymiş. Aynı aramayı hedef dizin belirterek de yapabiliriz. Bunun için find komutundan sonra dizin belirtmemiz ve aranacak kelimeyi yazmamız gerecek.
Dosya adına göre arama
-name parametresi ile dosya adına göre arama yapılabilir. Bu arama türünde sadece birebir eşleşmeler gösterilir.
find [dizin yolu] -name [aranacak dosya adı]
Bu durumda örnek komutumuz şu şekilde olacak: find Masaüstü/ -name deneme
Şu ana kadar direk dosya ismi ile arama yaptık. Eğer bazı karakterleri içeren dosyalar aranacaksa, aranacak kelimelerin başına *
işareti getirilir. Mesela Masaüstü dizininde a harfi ile biten dosyaları aratalım.
find Masaüstü -name *a
Masaüstü dizininde a harfi ile biten 2 tane dosya bulundu. Birde root dizininde conf ile biten dosyaları aratalım.
conf ile biten dosyalar listelendi. Belki dikkatinizi çekmiştir, bazı dosyalarda erişim engellendi şeklinde uyarı geldi. Sistem dosyalarında doğrudan işlem yapılamamakta. İşlem yapabilmek için root kullanıcısına geçmek ya da yapılan işlemi superuser olarak çalıştırmak gerekecektir. Kullanıcı izinleri ile ilgili konuyu ilerleyen yazılarda inceleyeceğiz ama kısaca değinmek gerekirse; root kullanıcısına geçmek için sudo su
komutunu kullanabilir ve bundan sonraki tüm işlemleri root kullanıcısı olarak yapabiliriz ya da tek seferlik yetki için komutun başına sudo
komutunu ekleyerek komutu çalıştırabiliriz. Her iki komutta da bizden root parolası isteyecektir. Parolayı girdikten sonra işlem gerçekleştirilecektir.
Ben örneğimde tek seferlik root kullanım izni ile yapacağım.
sudo find / -name *conf
Dosya değişim zamanına göre arama
Dosya değişim zamanına göre arama yapmak için -ctime parametresi kullanılır ve kaç gün öncesine kadar olan değişim isteniyorsa gün sayısı başında – işareti olarak yazılır. Örnek olarak son 1 gün içinde değişim olan dosyaları arayalım.
find Masaüstü/ -ctime -1
Dosya tipine göre arama
Yapılan aramalarda sonuçlar hem dosya hemde dizin olarak çıktı verilir. Örneğin aradığınız kelime dizin adında da geçiyorsa bu da çıktı olarak verilir. -type
parametresi ile dizin ya da dosya araması yapılabilir.
-type f : dosya sonuçlarını gösterir.
-type d : dizin sonuçlarını gösterir.
Örnek olarak png ile biten dizinleri arayalım.
find Resimler -type d -name *png
Dosya boyutuna göre arama
Son olarak dosya boyutuna göre arama işlemlerine bakalım. Dosya adına ilave olarak dosya boyutunu da ekleyerek aramayı daha da özel hale getirebiliriz. Boyut belirtmek için -size parametresi kullanılır. Parametreden sonra ise boyut için bir değer yazılır. Boyut direkt yazıldığında sadece o değerde olan dosyalar bulunur. Değerin üstündeki dosyaları bulmak için değer önüne + işareti, değerin altındaki dosyaları bulmak için ise – işareti kullanılır. Boyut belirtilirken boyutun türünün de belirtilmesi gerekir.
Boyut değerleri ise şu şekildedir:
k kilobytes
M megabytes
G gigabytes
T terabytes
P petabytes
Konuyu daha anlaşılır hale getirmek için örnek yapalım. Resimler dizininde bulunan sonu png ile biten ve boyutu 100k olan dosyaları aratmak için komut yapımız şu şekilde olacaktır. find Resimler/ -name *png -size 100k
Bu komut sonucunda muhtemelen bir sonuç elde edemeyeceğiz çünkü direkt boyutu 100 kb olan bir dosyanın bulunma ihtimali çok zor.
Görüldüğü gibi bir dosya bulamadık. Parametreyi 100 kb üzerinde olacak şekilde yapacağım :
find Resimler/ -name *png -size +100k
+100k yaparak 100 kb üzerindeki dosyaları bulmasını ve göstermesini istedim.
Resimler dizininde 100 kb üzeri olan ve dosya adı png ile biten 2 tane dosya bulundu. 100 kb altı olması isteseydim -100k yapacaktım.
Bunun haricinde boyut için arama alanı daha da daraltabilir. Örneğimde 100kb üstü olan tüm dosyalar ekrana geldi. bir aralık belirtilerek aramayı daha özel hale getirebiliriz. Bunun için iki tane boyut belirtmek gerekecektir. Örnek olarak 100kb üstü olan ve 5MB altında olan dosyaları arayalım.
find Resimler/ -name *png -size +100k -size -5M
Şimdilik find komutu için anlatacaklarım bu kadar. find komutu ile ilgili detaylı bilgiler edinmek için find --help
ve man find
komutlarından yardım alabilirsiniz.