Bir dosyayı adına ve kısmi yoluna göre nasıl arayabilirim?


64

Genellikle bir dosya ismim var ve kısmi bir yol var, örneğin "content / docs / file.xml".

Dizin adını ve dosya adını ayrı ayrı sağlamak için adını manuel olarak kesmeden bu dosyayı aramanın basit bir yolu var mı?

Bu şekilde çalışırsan harika olurdu find, koşabilirdim find content/docs/file.xml, ama maalesef işe yaramadı.


1
Başında bir * joker karakter eklemeyi deneyebilirsiniz. find -path *content/docs/file.xmlbenim için çalıştı.
Bob

teşekkürler, @Bob, gerçekten benim için çalıştı. BTW, ilginç, bir yıldız işaretinden sonra bir eğik çizgi eklersem: "find -path * / content / docs / file.xml", çalışmaz. Yine de çok teşekkürler.

Ayrıca, @Bob, lütfen bir cevap olarak yapın ve doğru olarak işaretleyeceğim.

Yıldız işaretinden sonraki eğik çizginin çalışmamasının nedeni muhtemelen yıldız işaretinin kaçmış olması gerektiğidir, cevabımdaki düzenlemeye bakın.
Bob

Yanıtlar:


72

Herhangi* bir eşleşmeyi belirtmek için bir joker karaktere geçin . Ayrıca s'den kaçmanız gerekir , örneğin:*

find . -path \*content/docs/file.xml

veya deseni tırnak işaretleri içine alın, örneğin:

find . -path "*content/docs/file.xml"

Man sayfasının tanımladığı gibi:

$ bul. -adı * .c -print

find: yollar ifadeden önce gelmelidir

Bunun nedeni * .c'nin kabuk gibi genişletilmesi ve bunun gibi bir komut satırı almasıyla sonuçlanmasıdır:

Bul -adı bigram.c code.c frcode.c locate.c -print

Bu komut elbette işe yaramayacak. İşleri bu şekilde yapmak yerine, deseni tırnak işaretleri içine almalı ya da joker kartından çıkmalısınız:

$ bul. -name \ *. c -print


10

find -wholename seçeneği de var find $top_dir -wholename *string*

find /usr -wholename *in/abiw*

>/usr/bin/abiword

Tam yolu bilmiyorum, sadece kısmi, bu yüzden "-whoameame" işe yaramayacak.

bayrak yanıltıcı, örneğime bakın ... sadece eğer dizgiyi bir dizine genişletmenizi sağlar
technosaurus

3
find . -type f | grep "content/docs/file.xml"

ya da sadece

locate content/docs/file.xml

bulun bulmak ilginç bir seçenektir, ancak tüm diski araştırıyor, temel arama dizinini belirleyebilme veya en azından param kullanarak belirtme yeteneğine sahip olmak istiyorum, bu dizinin bu aramadan yapılması gerekir (ilk seçeneğiniz gibi) , kökten değil.

1
@ user69817 - aksine, locate diski aramaz, genellikle günde bir kez cron ile doldurulan bir locate veritabanını sorgular.
tink

1

Örneğin, yıldız işaretini / joker karakterini ( *) kullanarak bir konumdaki dosyaları aramak : dir=“/apps/*/instance01/" find'ı kullanabilirsiniz ${dir} -name “*.jks”. tüm dosyaları şöyle bir diziye koymak:

arr=(`find ${dir} -name “*.jks"`)

Diğer uzantılara sahip dosyaları almak istiyorsanız 'veya' şunun gibi:

-name "*.keystore" -o -name "*.jks" -o -name “*.p12" çünkü -namesadece tek dizgiyi kabul eder, 'veya' kullanın.

Sonunda her şeyi şöyle diziye koyun:

arr=(`find ${dir} -name "*.keystore" -o -name "*.jks" -o -name "*.p12"`)

tam yollarınız varsa, kısmi yollar değil, bunları aşağıdaki gibi dizilere koymak daha kolaydır:

arr=(“/Users/ajay/Documents/keystore_and_p12files/"*.{keystore,p12,jks})
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.