Linux dosyalar içerisinde arama yapmak

GNU/LINUX üzerinde find komutu ile dosyalar içinde arama yapabilirsiniz, alt dizinleri de dahil eden bu arama yöntemi için aşağıdaki komut satırını kullanabilirsiniz,

Sadece uzantıları .conf ile biten dosyaların içeriğini görmek isterseniz.

find . -iname '*conf' | xargs grep 'kelime' -sl

find komutundan sonra kullanılan “.” nokta işareti bu aramanın bulunduğunuz dizin ve alt dizinlerinde gerçekleştirmek istediğinizi belirtir. Nokta yerine tam yolu da yazabilirsiniz, bu şekilde geri dönen cevaplar da tam yolu kapsayacak şekilde geri dönecektir. -iname ise belirttiğiniz anahtar kelime dosya isminde ya da uzantısında bulunacak olan kelimeyi belirtmektedir. -iname yerine -name kullanırsanız aramanız küçük/büyük harf duyarlı olacaktır. Aradaki farkları irdelemek için find komutu üzerinde denemeler yapmanızı tavsiye ederim, örneğin:

find . -iname '*conf' # conf ile biten dosyaları sıralayacaktır
find . -iname 'conf*' # conf ile başlayan dosyalar listelenecektir

“| xargs” ise çıkan sonuçların başka bir komuta yönlendirilmesi için kullanılır. Yani find komutu dosya isminde ya da uzantısında belirlenmiş olan anahtar kelimeleri alt dizinlerle birlikte bulur ve bu dosyaların içerisinde aramayı ise grep komutu yapar.

Dosya ismine göre arama yapma

Fark ettiyseniz dosya içerisinde arama yapmak için kullandığınız find komutu aynı zamanda dosya ismine göre de arama yapabilmektedir. Fakat find komutu bir veri tabanı kullanmadan, o anda dizinde olan tüm dosyaları belirlenen direktifler doğrultusunda arar. Eğer dosyaların daha önceden taranıp indekslenmesini istiyorsanız find komutu yerine locate komutunu kullanabilirsiniz. Locate komutu çoğu sistemde kurulu olarak gelmez ama kurulumu basittir. Kurulum direktiflerinden size uyanı aşağıdan seçebilirsiniz:

yum install mlocate # Centos, Red-Hat
dnf install mlocate # Fedora
apt-get install mlocate -y # Debian, Ubuntu

Yükeleme tamamlandıktan sonra dosyaların indekslenmesi için şu komutu çalıştırın

updatedb

Daha sonra aramak istediğiniz dosya ismini şu komut ile bulabilirsiniz

locate dosya

find ile büyük dosyaları bulmak

Aşağıdaki komut ile /dizin dizininde boyutu 100 MB ve üzeri olan dosyaları bulup sadece isimlerini yazdırabilirsiniz:

find /var/log -type f -size +100000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

Bu çıktıyı sıralamak isterseniz:

find /var/log/ -type f  -size +20M -exec sh -c "ls -l '{}'|awk '{print \$5/1048576 \" \033[1mMB:\033[0;0m \" \$9}'" \; | sort -nr -k1

Linux find ile dosya değiştirme ya da oluşturma tarihine göre dosyaları bulma

Güncellenmiş ya da yeni oluşturulmuş dosyaları bulma

Aşağıdaki komut ile /dizin dizininde iki gün önce modifiye edilmiş dosyaları bulup isimlerini yazdırabilirsiniz, mtime yerine ctime yazarsanız 2 gün içerisinde oluşturulmuş dosyaları bulursunuz: mtime: modifiye zamanı, ctime: oluşturma zamanı

find /dizin/ -type f -mtime -2 -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

iyi aramalar…

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir