Diyelim ki isimleri olan dosyalar var:
batman.c
debate.c
cricketbat.c
Hangi komutu ve tüm bu dosyaları arama etiketini kullanarak listelemek için nasıl kullanmalıyım bat?
Diyelim ki isimleri olan dosyalar var:
batman.c
debate.c
cricketbat.c
Hangi komutu ve tüm bu dosyaları arama etiketini kullanarak listelemek için nasıl kullanmalıyım bat?
Yanıtlar:
batHer Yerdeki Dosyaları Bulmaİçinde /path/to/folderadlarının bulunduğu her yerde tüm dosyaları bulmak için şunları batkullanabilirsiniz:
find /path/to/folder -name '*bat*'
Ben var alıntılanan arama deseni *bat*tırnak ihmal ve dosyalar maç olsaydı, çünkü *bat*geçerli dizinde, kabuk genişleyecektir *bat*bunlardan bir liste halinde ve geçmesi olduğunu için find. O findzaman doğru çalışmaz. (\*bat\* ve "*bat*"ayrıca çalışır.)
Şu anda bulunduğunuz klasörde arama yapmak için (örneğin cd, kullandığınız), .her zamanki gibi kullanın :
find . -name '*bat*'
Tüm bilgisayarınızı aramak için kullanın/ . Ana dizininizde arama yapmak için kullanın ~veya ana dizininizin tam adını kullanın . ( Kabuk~ , ev müdürünüzün tam nitelikli yoluna genişler .)
Dosyaların içeren bu yüzden, küçük harf duyarsız aramak istiyorsanız BAT, bAteşleştirilen benzeri ve kullanımı -inameyerine testini -nametesti:
find /path/to/folder -iname '*bat*'
Tüm dosyalarınızın bittiğini fark ettim .c. Yalnızca böyle dosyaları bulmak istiyorsanız, şunu kullanın:
find /path/to/folder -name '*bat*.c'
Tüm dosya adlarınızın son ekin batbaşında ya da en sonunda olduğunu fark ettim .c. Gibi dosyaları eşleştirmek önlemek embattled.cistiyorsanız, kullanabilirsiniz:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-oolduğu ya da operatör.
Yalnızca düzenli dosyaları bulmak - klasörleri, sembolik bağları ve özel aygıt düğümlerini bulmak için - kullanabilirsiniz -type f. Bu, sık sık tavsiye edilir ve bazen oldukça uygundur ... ancak çoğu zaman gerçekten istediğinizi değil , özellikle findçıktıyı kendiniz incelemek amacıyla çalışıyorsanız . Eğer olsaydı sembolik bir bağlantı , Aramanızla eşleşen bu konuda bilmek istemez ki?
Hem normal dosyaları hem de sembolik bağlantıları bulmak istiyorsanız, şunları kullanabilirsiniz:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Bu, -oişleci ve ayrıca gruplama için parantezleri kullanır (bu, kabuğun özel olarak işlem görmemesi için alıntılanması gerekir; aksi halde sözdizimi hatası alırsınız).
Ancak, yalnızca nihayetinde normal bir dosyaya işaret eden sembolik linkleri görmek istediğinizi varsayalım (ve dizinlere, cihaz düğümlerine, vb. Sembolik linkleri değil). Bu aslında daha da basit: -xtypeyerine kullanın -type. Eğer Kaçmıyoruz şartıyla findbirlikte -L, bayrak -xtypesembolik linke bağlantı noktaları için dosyanın türünü test eder.
find /path/to/folder -name '*bat*' -xtype f
Bir dosyaya başka bir bağlantıya bir bağlantı bağlantınız varsa -xtype f, doğrudan hedefi normal bir dosyadan ziyade başka bir bağlantıya sahip olmasına rağmen eşleşecektir . Bu neredeyse her zaman istediğin şey.
Genellikle insanlar istediklerini düşünür -type f, ama gerçekten isterler -xtype f.
findbelirtmezseniz varsayılan eylemdir -print. Yukarıda verilen tüm komutlar -printsonunda tacked ile kendilerine eşdeğerdir .
findBulunan dosyalara dayanarak komut çalıştırmak için kullanılır - genellikle değişiklik yapan komutları kullanır. Ancak, amacı sonuçları görüntülemek olan başka eylemler de var -print. Özel ilgi alanı -ls:
find /path/to/folder -name '*bat*' -ls
Bu, her bir dosya hakkında, çok sütunlu bir biçimde, çalıştırarak göreceklerinize benzer (ancak aynı olmasa da) benzer ayrıntılı bilgiler verir .ls file
findDosya bulmayla ilgili diğer yollar ve diğer yollar için, bkz:
findkitabına , çevrimiçi olarak erişilebilir veya man findbir terminalde çalışarak.find, locateve xargsaraçlar.-xtypetavsiye; belki ls *bat*ve -maxdepth/ mindepthayrıca bahsetmeye değer.
lszaten, ben ile özyinelemeli durumda odaklanmış findburada. Tabii ki, ayrıntılı bir cevap bazı desen eşleştirme dosya adlarını -Yinelemeli liste dışı kapsayan (veya daha az) ( lsve findile -maxdepth) de yararlı olacaktır. Böyle bir cevap göndermek isteyebilirsiniz!
En kolay yol kaçmaktır.
locate bat
Bu yolla, dosya adında "yarasa" içeren dosyalar için tüm bilgisayarda arama yapabilirsiniz.
PC'nizdeki dosyaların listesini yenilemek için
updatedb
Son zamanlarda hesabınıza yeni dosyalar eklediğinizde bu komutu çalıştırın
updatetdb
updatedbveya otomatik olarak son çalıştırılandan daha yeni), sudo updatedbönce çalıştırılması gerekir, evet.
bat.
find /olarak locateise, bir veritabanından aramalar findyinelemeli listeleri /sonra ve normal ifadeyle eşleşir.
Terminali açın ve aramaya başlamak istediğiniz dizini dizinlere getirin ve ardından şu komutu çalıştırın:
find . -name "*bat*" -type f
Geçerli .dizinden find komutunu başlatır.
Dizeyle -nameeşleşir batve büyük / küçük harf duyarlıdır. ( -inameDuyarsız olduğu) sadece dosyalar için arar.-type f
Dosyalar geçerli dizinde ise:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Veya (satır satır satır yapmak için):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Bu dosyalar için sistemi aramak istiyorsanız, şunu kullanın:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
findKomutu büyük / -inameküçük harf duyarsız dosya adı eşleştirme seçeneğiyle birlikte kullanmak-name seçeneği . Bunların her ikisi de joker karakter adlarını kullanmanıza izin verecektir. Yani, "yarasa" içeren herhangi bir dosya adını bulmak için kullanacağınız:
find / -iname '*bat*'
Veya
find / -name '*bat*'
*Araçlar arama aradığı böylece "herhangi bir karakter (ler)", batbaşında veya sonunda, hiçbiri dahil olmak üzere herhangi karakterler ile. /Kök dizinden yapılan aramaları art .arda alarak, geçerli dizinden yinelemeli olarak arama yapacak olanı veya aramak istediğiniz yerin mutlak yolunu kullanabilirsiniz. Linux shell komut dosyasında regex kullanarak dosyaları nasıl aradığına bir göz atın
-type f
Eski güzel kullanın find.
find <path_for_search> -type f -iname "*bat*"
Örneğin.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
from man find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.