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:
bat
Her Yerdeki Dosyaları Bulmaİçinde /path/to/folder
adlarının bulunduğu her yerde tüm dosyaları bulmak için şunları bat
kullanabilirsiniz:
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 find
zaman 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
, bAt
eşleştirilen benzeri ve kullanımı -iname
yerine testini -name
testi:
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 bat
başında ya da en sonunda olduğunu fark ettim .c
. Gibi dosyaları eşleştirmek önlemek embattled.c
istiyorsanız, kullanabilirsiniz:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
olduğ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, -o
iş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: -xtype
yerine kullanın -type
. Eğer Kaçmıyoruz şartıyla find
birlikte -L
, bayrak -xtype
sembolik 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
.
find
belirtmezseniz varsayılan eylemdir -print
. Yukarıda verilen tüm komutlar -print
sonunda tacked ile kendilerine eşdeğerdir .
find
Bulunan 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
find
Dosya bulmayla ilgili diğer yollar ve diğer yollar için, bkz:
find
kitabına , çevrimiçi olarak erişilebilir veya man find
bir terminalde çalışarak.find
, locate
ve xargs
araçlar.-xtype
tavsiye; belki ls *bat*
ve -maxdepth
/ mindepth
ayrıca bahsetmeye değer.
ls
zaten, ben ile özyinelemeli durumda odaklanmış find
burada. Tabii ki, ayrıntılı bir cevap bazı desen eşleştirme dosya adlarını -Yinelemeli liste dışı kapsayan (veya daha az) ( ls
ve find
ile -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
updatedb
veya otomatik olarak son çalıştırılandan daha yeni), sudo updatedb
önce çalıştırılması gerekir, evet.
bat
.
find /
olarak locate
ise, bir veritabanından aramalar find
yinelemeli 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 -name
eşleşir bat
ve büyük / küçük harf duyarlıdır. ( -iname
Duyarsı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
find
Komutu büyük / -iname
küçü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)", bat
başı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.