1. Synopsis
Şöyledir.
Hem /usr/local/bin hem de /bin dizinler arama yapmak için şöyle yaparız.
Şöyledir.
SYNOPSIS
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
2. Dosyaları Bulma Sırası
Dosyaları bulma sırası her zaman aynı değildir. Açıklaması şöyle
The order find processes the files is not deterministic. It may be just the same order as the underlying system call gives, which probably depends on the underlying filesystem structure and can be essentially random.
3. Farklı Path'ler Yan Yana Verilebilir
ÖrnekHem /usr/local/bin hem de /bin dizinler arama yapmak için şöyle yaparız.
$ find /usr/local/bin/ /bin/ -printf '%P\n'
4. Seçenekler
Bazı arama seçenekleri şöyle
Büyüklüğe göre arama seçenekleriAccess Denied veya Permission Denied Hataları
Access denied hataları STDERR akımına yazılır. Bu hataları görmemek için STDERR akımını /dev/null'a yönlendiririz. Şöyle yaparız.
Son x günde erişilmemiş dosyaları listeler. Dosyaya erişilmesi değiştirildiği anlamına gelmez. Bu seçenek te aynı -mtime seçeneği gibi gün cinsinden sayar. Yani 1.5 gün diye bir şey bilmez. 1 gün, 2 gün, 3 gün şeklinde sayar. Açıklaması şöyle
Extended regex anlamına gelir. Şöyle yaparız.
delete seçeneği yazısına taşıdım
Access denied hataları STDERR akımına yazılır. Bu hataları görmemek için STDERR akımını /dev/null'a yönlendiririz. Şöyle yaparız.
find /home -iname "*.pdf" 2>/dev/null
Bir diğer çözüm ise STERR akımını STDOUT akımına yönlendirmek ve hataları grep -v ile göstermemek. Şöyle yaparız.find /home -iname "*.pdf" 2>&1 | grep -v "access denied"
- atime seçeneğiSon x günde erişilmemiş dosyaları listeler. Dosyaya erişilmesi değiştirildiği anlamına gelmez. Bu seçenek te aynı -mtime seçeneği gibi gün cinsinden sayar. Yani 1.5 gün diye bir şey bilmez. 1 gün, 2 gün, 3 gün şeklinde sayar. Açıklaması şöyle
When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.-E seçeneği
Extended regex anlamına gelir. Şöyle yaparız.
find -E . -iregex ".*optimizing.*"
-delete seçeneğidelete seçeneği yazısına taşıdım
-empty seçeneği
Örnek - not empty
Sadece hex zero içeren dosyaları bulmak için şöyle yaparız. Burada not empty kullanılıyor
find path/to/startdir/ -type f ! -empty -exec grep -zvL '^$' {} +
Örnek
Elimizde şöyle bir yapı olsun.
parentdir'ın altındaki boş dizinleri silmek için şöyle yaparız.
Elimizde şöyle bir yapı olsun.
Parent/
|____Child1/
|______ file11.txt (empty)
|______ Dir1/ (empty)
|____Child2/
|_______ file21.txt
|_______ file22.txt (empty)
|____ file1.txt
parentdir'ın altındaki boş dosyaları/dizinleri silmek için şöyle yaparız.find Parent -empty -delete
Çıktı olarak şunu alırızParent/
|____Child2/
|_______ file21.txt
|____ file1.txt
Örnekparentdir'ın altındaki boş dizinleri silmek için şöyle yaparız.
find /home/user/parentdir/* -type d -empty -delete
-exec seçeneği
exec seçeneği yazısına taşıdım
-iname seçeneği
Aranacak dosya ismini belirtir. Şöyle yaparız.
Belirtilen inode numarasını kullanır. Sözdizimi şöyledir.
Dosyaların inode numarasını görmek için şöyle yaparız.
Şöyle yaparız. inum olarak dizinin numarasını veriyoruz ve içini listeliyoruz.
regex seçeneği yazısına taşıdım
-max-matches seçeneği
Çok fazla sonuç dönüyorsa ve bunu sınırlandırmak istersek kullanırız.
Örnek
Şöyle yaparız.
Açıklaması şöyle
Aranacak dosya ismini belirtir. Şöyle yaparız.
find /etc -iname '*abc*' -delete
-inum seçeneğiBelirtilen inode numarasını kullanır. Sözdizimi şöyledir.
find <somepath> -inum <inode_number> ...;
ÖrnekDosyaların inode numarasını görmek için şöyle yaparız.
$ ls -li
total 0
133370 -rw-r--r-- 1 malte malte 0 Dec 30 19:00 ...
132584 -rw-r--r-- 1 malte malte 0 Dec 30 18:59 ...
Bu dosyaları silmek için şöyle yaparız.$ find . \( -inum 133370 -o -inum 132584 \) -exec rm -i {} \;
Örnek
Şöyle yaparız
#inode numarasını bul
ls -lid -- *env*
# İlk sütundaki inode numarasını al ve aşağiya ekle
find . -inum <inode> -delete
Örnek
$ find . -inum 888696 -exec ls '{}' \;
Conversation.pst Outlook Data File Outlook Data File.sbd Trash Unsent Messages
Inbox.pst Outlook Data File.msf Sent.pst Trash.msf Unsent Messages.msf
-iregex seçeneğiregex seçeneği yazısına taşıdım
-max-matches seçeneği
Çok fazla sonuç dönüyorsa ve bunu sınırlandırmak istersek kullanırız.
Örnek
Şöyle yaparız.
find -max-matches 1000 -exec mv {} /path/to/collection1 \+;
-maxdepth seçeneğiAçıklaması şöyle
Since the find command is recursive, it can sometimes return quite a lot of results. If you want to limit the number of levels, then use the -maxdepth option. Similarly, you can use -mindepth to define a minimum depth to go to, before results start to be returned.
Örnek
Şöyle yaparız. Bakılacak derinliği belirtir.
find . -maxdepth 2 -regextype egrep -type f -regex './dump-[0-9]{4}\.zip' -delete
Örnek
Sadece belli bir derinlikteki dosyaları bulmak için şöyle yaparız
find . -name "*.txt" -maxdepth 2 -mindepth 2
-name seçeneği
name seçeneği yazısına taşıdım
printf seçeneği
printf seçeneği yazısına taşıdım
-prune seçeneği
Bu seçenek bayağı tartışmalı.
Bu seçenek bayağı tartışmalı.
Örnek
Bazı dizinlere girilmemesini sağlar. dir1,dir2,dir3 dizinlerine girmemek için şöyle yaparız.
-regex seçeneği
regex seçeneği yazısına taşıdım
xdev seçeneği
Farklı dosya sistemleri aynı inode numarasına sahip olabilir. Sadece başlangıç noktasındaki dosya sistemi yani tek bir dosya sisteminde arama yapmak için şöyle yaparız.
find . -type d \( -path dir1 -o -path dir2 -o -path dir3 \) -prune -o -print
Örnek
"." (nokta) karakteri ile başlayan dizinlere girmemek için şöyle yaparız
find . -mindepth 1 -type d \( -name '.*' -prune -o -print \)
regex seçeneği yazısına taşıdım
xdev seçeneği
Farklı dosya sistemleri aynı inode numarasına sahip olabilir. Sadece başlangıç noktasındaki dosya sistemi yani tek bir dosya sisteminde arama yapmak için şöyle yaparız.
find / -xdev -inum 12582925
Hiç yorum yok:
Yorum Gönder