Yanıtlar:
Bunun için bul komutunu kullanın :
find . -name "foo*"
find
bir başlangıç noktasına ihtiyaç duyar ve .
(nokta) geçerli dizini gösterir.
find . foo*
, foo*
genişletilecekti ve SONRA bulmaya geçti.
" "
özyinelemeli arama için çok gereklidir.
find . -name "foo*" 2>/dev/null
Grep'e boru bulmak genellikle daha uygundur; size rastgele joker karakter eşleşmesi için düzenli ifadelerin tam gücünü verir.
Örneğin, dosya adında büyük / küçük harfe duyarlı olmayan "foo" dizesi bulunan tüm dosyaları bulmak için:
~$ find . -print | grep -i foo
find
Ayrıca vardır -iname
, -regex
ve -iregex
bu yüzden etmek, küçük harf duyarsız joker, regex ve küçük harf duyarsız düzenli ifade eşleşmesi için bayraklar boru grep
gereksizdir.
find
bu seçenekleri destekleyen bir komutla gelmediğini size söyleyebilirim . Bazen grep
tek seçenek haline gelir.
find
bir kalıpla eşleşen tüm dosyaları bulur:
find . -name "*foo"
Ancak, bir resim istiyorsanız:
tree -P "*foo"
Bu yardımcı olur umarım!
brew install tree
apt-get
yüklü olmayan Mac OSX kullanıcıları için
find -L . -name "foo*"
Bazı durumlarda, sembolik dizin bağlantılarını işlemek için -L parametresine ihtiyacım var. Varsayılan olarak sembolik bağlantılar yoksayılır. Bu durumlarda, dizini bir alt dizine değiştirip desenle eşleşen dosyayı göreceğimizden, ancak dosya adını döndürmeyeceğinden oldukça kafa karıştırıcıydı. -L kullanmak bu sorunu çözer. Bulmak için sembolik bağlantı seçenekleri -P -L -H
Kabuğunuz yeni bir globbing seçeneğini destekliyorsa (tarafından etkinleştirilebilir :)shopt -s globstar
, şunları kullanabilirsiniz:
echo **/*foo*
herhangi bir dosya veya klasörü özyinelemeli bulmak için. Bu Bash 4, zsh ve benzeri kabuklar tarafından desteklenir.
Şahsen ben tanımlanmış bu kabuk fonksiyonu var:
f() { find . -name "*$1*"; }
Not: Yukarıdaki satır doğrudan kabuğa yapıştırılabilir veya kullanıcı ~/.bashrc
dosyasına eklenebilir .
Sonra yazarak herhangi bir dosya arayabilirsiniz:
f some_name
Alternatif olarak, basit bir sözdizimine sahip bir fd
yardımcı programı kullanabilirsiniz , ör fd pattern
.
shopt -s globstar
komutla etkinleştirmeniz gerektiğinden . Bu Bash, zsh ve benzeri kabuklarda desteklenir.
bash-3.2$ shopt -s globstar
verirbash: shopt: globstar: invalid shell option name
fd
Durumda, find
, deneyin çok yavaş fd
basit ve hızlı bir alternatiftir - yarar find
Rust yazılmış.
Sözdizimi:
fd PATTERN
Demo:
Ana sayfa: https://github.com/sharkdp/fd
asciicast2vector
kullanılabilir.
find <directory_path> -type f -name "<wildcard-match>"
Joker karakter eşleşmesinde, eşleştirmek istediğiniz dizeyi sağlayabilirsiniz, örneğin * .c (tüm c dosyaları için)
Kullanabilirsiniz:
# find . -type f -name 'text_for_search'
REGX kullanımı istiyorsanız -iname
# find . -type f -iname 'text_for_search'
Özyinelemeli dosya aramanın varsayılan yolu ve çoğu durumda kullanılabilir
find . -name "filepattern"
Konumlandığınız geçerli dizinden dosya adı veya desen için özyinelemeli geçiş yapmaya başlar. Find komutuyla, seçeneklerin tam listesini görmek için joker karakterleri ve çeşitli anahtarları kullanabilirsiniz.
man find
veya sisteminizde man sayfaları yoksa
find --help
Ancak, daha sonra tüm dosya sisteminizde gezinen ve dosyalarınızı endeksleyen daha modern ve daha hızlı araçlar var, böyle yaygın bir araç bulun veya slocate / mlocate, işletim sisteminizin nasıl kurulacağına dair el kitabını kontrol etmelisiniz ve yüklü veritabanı başlatmak gerekiyor, eğer yükleme komut dosyası sizin için yapmazsanız, yazarak manuel olarak yapılabilir
sudo updatedb
Ve belirli bir dosya türünü aramak için kullanmak için
locate filename
Veya geçerli dizinden dosya adı veya pıtırtı aramak için şunu yazabilirsiniz:
pwd | xargs -n 1 -I {} locate "filepattern"
Dosya veritabanına bakacak ve yazdığınız desenle eşleşen yol adlarını hızlı bir şekilde yazdıracaktır. Konum seçeneklerinin tam listesini görmek için şunu yazın:
locate --help
veyaman locate
Ayrıca, cron işi aracılığıyla veritabanını planlanan zamanlarda güncellemek için konumlandırma yapılandırabilirsiniz, böylece 1AM'de db'yi güncelleyen örnek cron şöyle görünecektir:
0 1 * * * updatedb
Bu cron işlerinin root tarafından yapılandırılması gerekir, çünkü updatedb tüm dosya sistemini çaprazlamak için root ayrıcalığına ihtiyaç duyar.
Yinelemeli olarak gideceğimizde yer tespitinin çok fazla kullanılmadığını görünce şaşırdım.
Öncelikle ilgili geçerli klasördeki dosyaların listesini almak için bir "$ PWD" bulun ve sonra ben istedikleri gibi üzerlerinde greps çalıştırın.
locate "$PWD" | grep -P <pattern>
Tabii ki, bu updatedb yapıldığını ve dizinin periyodik olarak güncellendiğini varsayar. Bu, dosyaları bulmanın ve ağaçtan aşağı gitmesini istemekten daha hızlı dosya bulmanın yoludur. Bunu bütünlük için belirtmek. Ağaç çok ağır değilse, bulmaya karşı hiçbir şey yok.
locate "$PWD*.mp4"
Sadece atlayabileceğinizi hatırlatmak içingrep
Aşağıdaki komut herhangi bir dosyayı aramaya yardımcı olur
1) Durumdan bağımsız olarak
2) Sonuç İzinsiz klasörleri hariç tutma
3) Kökten veya istediğiniz yoldan arama yapma. İstediğiniz yolu / ile değiştirin.
Sözdizimi:
find -iname '' 2> & 1 | grep -v "İzin reddedildi"
Örneği
bul / -iname 'C * .xml' 2> & 1 | grep -v "İzin reddedildi"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
Joker karakterle özel bir dosya aramak istiyorsanız, aşağıdaki kodu kullanabilirsiniz:
find . -type f -name "*.conf"
Her bir .conf dosyasını buradan aramak istediğinizi varsayalım:
.
buradan başlayan arama (geçerli yer)
-type
, burada dosya (f) olan arama öğesinin türü anlamına gelir. * .conf adlarına
-name
sahip dosyaları aramak istediğiniz anlamına gelir .
kullanım
find path/to/dir -name "*.ext1" -o -name "*.ext2"
açıklama
find
özyineleme yapar.-o
Açılımı -or
. Yani yukarıda bu joker karakteri VEYA bunu arayın. Sadece bir desene sahipseniz, buna gerek yok -o
.