Dosya aramak. Bitmez tükenmez bir ihtiyaç. Bütün işlevlerin de yıllar önce tasarlanmış bir find komutunun yetenekleri ile hala yapılabiliyor olması ilginç.
En çok kullandığım işlev, en son değişiklik tarihine göre dosya aramak; muhtemelen kısmi dosya ismi ile birlikte. Son 1 gün içinde değişen dosyaları bulmak için
find /home/metin/documents -type f -iname '*rapor*.txt' -mtime 1
Burada en sondaki rakamın yanında artı veya eksi olmadığından tam 1 gün önce (1 ile 2 arasındakileri; yani 24 saat ve 48 saat önce değişenleri) değişenleri bul demek. 1 günden önce değişenler demek için
find . -type f -iname '*rapor*.txt' -mtime +1
Bir günden daha önce (24 saatten daha kısa süre önce) değişenleri bul demek için ise
find . -type f -iname '*rapor*.txt' -mtime -1
demek gerek.
Son 10 dakika içinde değişen (oluşan) dosyaları görmek için
find . -type f -mmin -10
Son 10 dakika ile 30 dakika arasında değişen dosyaları görmek için
find . -type f -mmin +10 -mmin -30
Daha net bir tarih ve saat bilgisi için -newermt parametresi kullanılabilir. Örneğin 1 Ocak 2024'ten sonra değişen txt uzantılı dosyalar için
find . -type f -newermt '2024-01-01'
find . -type f -newermt 'Jan 1 2024'
find . -type f -newermt '2024-01-01 01:25 PM'
gibi komutlar kullanılabilir. En sondaki örnek diğerleri ile eşdeğer değil, saat farkı ile farklı sonuçlar üretir, sadece ISO tarih biçimindeki saat bilgisini göstermek için verdim.
Bu parametre daha esnek kullanıma da sahip. Örneğin
find . -type f -newermt 'yesterday'
find . -type f -newermt '2 weeks ago'
find . -type f -newermt '6 hours ago'
Hatta belli bir tarih aralığı için ünlem "!" işareti aralık sonu belirlenebilir. Örneğin 1 Ocak 2024 ile 31 Nisan 2024 arasını belirtmek için
find . -type f -newermt "2024-01-01" ! -newermt "2024-04-31"
Bir dosyanın oluşturulmasından daha sonra oluşturulmuş (düzenlenmiş) dosyaları bulmak da mümkün. Örnek dosyamız /home/metin/referans_dosya olsun.
find . -type f -newer /home/metin/referans_dosya
Tüm tarih verileri sistemin yerel saatine göre yapılıyor.
Başka bir kriter de dosya boyutu. Genelde ihtiyacım olan belli bir boyutun üzerinde olan dosyalar. 2 GB'tan büyük ISO dosyaları için
find . -type f -iname '*.iso' -size +2G
Tam tersi, 2 GB'tan küçük iso dosyaları için ise, tahmin edilebileceği gibi boyut belirten 2'nin yanındaki artı '+' işaretini eksiye '-' çevirerek
find . -type f -iname '*.iso' -size -2G
find komutu sonrasında dosyanın ls ile gösterilen ayrıntılarını görmek istiyorsak iki seçenek var. -exec kullanmak, ya da find'in kendi -ls parametresini kullanmak. İki örnek
find . -type f -newermt 'yesterday' -exec ls -l {} \;
find . -type f -newermt 'yesterday' -ls
İlk örneğin sonundaki \; işareti ls komutunu bulunan her dosya için ayrı ayrı çalıştır demek. Her birini toplayıp tek seferde ls çalıştırmak için bunun yerine \+ kullanmak gerek.
İkinci örnekteki -ls parametresi, normal ls komutunun çıktısına göre 2 fazla sütun veri üretir. İlk sütun bulunan dosyanın dosya sistemindeki inode numarası. İkinci sütun ise bu dosyanın dosya sisteminde kaç blok kapladığını gösterir (sistemimizde bir blok kaç byte diye bakmak istersek sudo tune2fs -l /dev/sda). Aslında ls -li komutu ile de bu sütunlara ulaşmak mümkün.
Sadece bulunduğumuz klasördeki dosyalarla ilgileniyorsak ve en son değiştirilenleri bulmak istiyorsak
ls -ltR
Bu şekilde değiştirilme zamanlarına (-t) göre sıralar. En son değiştirilenlerin en altta yer alması için (-R) kullanılır, yoksa en son değişenler en üstte yer alır. Sadece son değişen 10 tane ile ilgileniyorsak
ls -lt | head
kullanabiliriz. Dosya boyutuna göre sıralamak için -S kullanılabilir. Bu da varsayılan olarak büyükten küçüğe sıralar. En büyük 5 dosyayı listelemek için
ls -lS | head -5
---
https://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/
Hiç yorum yok:
Yorum Gönder