Yanıtlar:
Bunun için bul komutunu kullanın :
find . -name "foo*"
findbir 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
findAyrıca vardır -iname, -regexve -iregexbu 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 grepgereksizdir.
findbu seçenekleri destekleyen bir komutla gelmediğini size söyleyebilirim . Bazen greptek 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 treeapt-getyü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ı ~/.bashrcdosyasına eklenebilir .
Sonra yazarak herhangi bir dosya arayabilirsiniz:
f some_name
Alternatif olarak, basit bir sözdizimine sahip bir fdyardımcı programı kullanabilirsiniz , ör fd pattern.
shopt -s globstarkomutla etkinleştirmeniz gerektiğinden . Bu Bash, zsh ve benzeri kabuklarda desteklenir.
bash-3.2$ shopt -s globstarverirbash: shopt: globstar: invalid shell option name
fdDurumda, find, deneyin çok yavaş fdbasit ve hızlı bir alternatiftir - yarar findRust yazılmış.
Sözdizimi:
fd PATTERN
Demo:
Ana sayfa: https://github.com/sharkdp/fd
asciicast2vectorkullanı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 --helpveyaman 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
-namesahip dosyaları aramak istediğiniz anlamına gelir .
kullanım
find path/to/dir -name "*.ext1" -o -name "*.ext2"
açıklama
findözyineleme yapar.-oAçılımı -or. Yani yukarıda bu joker karakteri VEYA bunu arayın. Sadece bir desene sahipseniz, buna gerek yok -o.