adlarını kendi adlarının bir kısmını arayarak bulmak için komut?

23

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?

    
sordu srk_cb 08.05.2015 14:44

6 cevap

33

% Co_de% ile Her Yerde Dosya Bulma

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.)

Aramanızı, İsteğe Dayalı Olarak Genişletme veya Daralma

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 Eşleşen Dosyalar

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.

Detaylı Çıktı Alma

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.

İleri Okuma

-print ve dosya bulmanın diğer yolları hakkında daha fazla bilgi için, bkz:

verilen cevap Eliah Kagan 08.05.2015 15:43
16

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

    
verilen cevap Mark Kirby 08.05.2015 14:49
14

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.

    
verilen cevap karel 08.05.2015 14:46
6

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
    
verilen cevap chaos 08.05.2015 15:00
4

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

    
verilen cevap AJefferiss 08.05.2015 14:46
2

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.
    
verilen cevap A.B. 08.05.2015 15:09

Etiketlerdeki diğer soruları oku