Diyelim ki isimleri olan dosyalar var:
batman.c
debate.c
cricketbat.c
Hangi komutları ve tüm bu dosyaları bat
? arama etiketini kullanarak listelemek için nasıl kullanmalıyım?
Diyelim ki isimleri olan dosyalar var:
batman.c
debate.c
cricketbat.c
Hangi komutları ve tüm bu dosyaları bat
? arama etiketini kullanarak listelemek için nasıl kullanmalıyım?
bat
içindeki tüm dosyaların içinde /path/to/folder
adlarını içeren tüm dosyaları bulmak için şunları kullanabilirsiniz:
find /path/to/folder -name '*bat*'
Tırnak işaretleri çıkarılmışsa ve alıntı yaptım arama kalıp bat
var dosyalar geçerli dizinde *bat*
ile eşleşir, kabuk *bat*
öğesini bir listeye genişletir ve bu değerini *bat*
olarak geçirir. Daha sonra find
doğru çalışmıyor. ( find
ve \*bat\*
da çalışıyor.)
Şu anda bulunduğunuz klasörde (ör. "*bat*"
ed yaptığınız) arama yapmak için, her zamanki gibi cd
kullanın:
find . -name '*bat*'
Tüm bilgisayarınızı aramak için .
kullanın . Ev dizini aramak için /
veya giriş dizininizin tam adını kullanın. ( Kabuk, ev yöneticinizin tam nitelikli yoluna ~
'sini genişletir.)
Büyük / küçük harf duyarsız bir şekilde arama yapmak istiyorsanız, ~
, BAT
ve benzerlerini içeren dosyalar eşleştirilirse, bAt
testinin yerine -iname
testini kullanın:
find /path/to/folder -iname '*bat*'
Tüm dosyalarınızın -name
olarak bittiğini fark ettim. Sadece böyle dosyaları bulmak istiyorsanız, kullanın:
find /path/to/folder -name '*bat*.c'
Tüm dosya adlarınızın, .c
sonekinden önceki bölümün en başında veya en sonunda bat
değerine sahip olduğunu fark ettim. % Co_de% gibi dosyaları eşlemek istemiyorsanız, şunları kullanabilirsiniz:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
.c
, veya operatördür.
Yalnızca normal dosyalar 'ı bulmak ve klasörleri, sembolik bağlantıları değil ve özel cihaz düğümleri - embattled.c
'yi kullanabilirsiniz. Bu sık sık önerilir ve bazen oldukça uygun ... ama özellikle gerçekten istediğiniz şeyi değil , özellikle de -o
'ı çıktıyı kendiniz incelemek için kullanıyorsanız. Aramanızla eşleşen sembolik bir bağlantı varsa, bunu öğrenmek istemez miydiniz?
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, -type f
işlecini ve ayrıca gruplandırma için parantezleri kullanır (kabuğun bunları özel olarak ele almaması için alıntılanması gerekir; aksi takdirde bir sözdizimi hatası alırsınız.)
Ancak, nihayetinde düzenli bir dosyaya işaret eden sembolik bağları görmek istediğinizi varsayalım (ve dizinlere, aygıt düğümlerine vb. sembolik bağlantılar değil). Bu aslında daha da basit: find
yerine -o
kullanın. % Co_de% 'yi -xtype
bayrağı, -type
ise sembolik bir bağlantıyla çalıştırmamanız koşuluyla, bağlantının işaret ettiği dosyanın türünü test etmektesiniz.
find /path/to/folder -name '*bat*' -xtype f
Bir dosyaya başka bir sembolik bağlantı bağlantınız varsa, find
değeri, doğrudan hedefi, normal bir dosya yerine başka bir sembolik bağlantı olsa bile eşleşir. Bu neredeyse her zaman istediğin şey.
Çoğu zaman insanlar -L
istediklerini düşünüyor, ancak gerçekten -xtype
istiyorlar.
Belirtilmemişse -xtype f
'nin varsayılan eylemi -type f
' dir. Yukarıda verilen tüm komutlar, kendilerine -xtype f
oranında dayandırılır.
find
, genellikle bulunan dosyaları temel alan komutları çalıştırmak için kullanılır - genellikle, değişiklik yapan komutlar. Ancak amacı, sonuçları -print
dışında görüntülemek olan başka eylemler de vardır. Özellikle ilgi -print
:
find /path/to/folder -name '*bat*' -ls
Bu, her dosya hakkında, çok sütunlu bir biçimde, find
'yi çalıştırarak göreceğinize benzer (ancak tam olarak aynı değil) ayrıntılı bilgi verir.
-print
ve dosya bulmanın diğer yolları hakkında daha fazla bilgi için, bkz:
-ls
öğesini çalıştırarak bir terminal. ls file
, find
hakkında kapsamlı dokümantasyon sağlayarak, ve find
yardımcı programı. En kolay yol çalıştırmaktır
locate bat
Bu şekilde dosya adına "bat" içeren dosyalar için tüm bilgisayarı tarayabilirsiniz
Bilgisayarınızdaki dosyaların listesini yenilemek için
updatedb
Kısa süre önce hesabınıza yeni dosyalar eklediğinizde bu komutu çalıştırın
Terminali açın ve dizinleri aramaya başlamak istediğiniz yerden dizine değiştirin ve sonra şu komutu çalıştırın:
find . -name "*bat*" -type f
.
, mevcut dizinden bulma komutunu başlatır.
% Co_de% dizesi -name
ile eşleşir ve büyük / küçük harf duyarlıdır. ( bat
büyük / küçük harf duyarlıdır)
% Co_de%, yalnızca dosyaları arar.
Dosyalar geçerli dizinde kullanılıyorsa:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Veya (onları satır satırında bulundurmak için):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Sistemi bu dosyalarda aramak istiyorsanız, kullanın:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
find
komutunu, duyarsız dosya adı eşleşmesi için -iname
seçeneğiyle veya büyük / küçük harfe duyarlı dosya adı eşleşmeleri için -name
seçeneğini kullanmak istiyorsunuz. Bunların ikisi de joker isimlerini kullanmanıza izin verecektir. Yani, "yarasa" içeren herhangi bir dosya adını bulmak için:
find / -iname '*bat*'
Ya
find / -name '*bat*'
*
, "herhangi bir karakter (ler)" anlamına gelir, bu nedenle arama, bat
değerini, herhangi bir karakter içermeden önce, sonra veya sonrasında arar. % Co_de% kök dizininden ardışık olarak arama yapar, mevcut dizinden yinelemeli olarak arama yapacak /
'yi veya aramak istediğiniz yerin mutlak yolunu kullanabilirsiniz.
Linux'ta regex kullanan dosyaları nasıl arayabilirim? kabuk betiği
Eski find
'i kullanın.
find <path_for_search> -type f -iname "*bat*"
örn.
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
man find
:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.
Etiketlerdeki diğer soruları oku command-line find search files