Konum bulmayı yalnızca bir dizin için nasıl kullanabilirim


10

Bu, "Dropnot" un çeşitli alt dizinleri altında çok sayıda dosya bulur

$ locate Dropnot

Yalnızca dizin konumunu bulabilir miyim locate? ("Dropnot" dizini)

Yani eğer varsa Dropnot, /home/me/geri gelen tek giriş budur.

Eğer öyleyse, en basit / en kısa yol nedir?

Tercihen, bir boru veya sembolle dışarı çıkmak ve bunun için selamlamak yerine, ama bir seçenek olarak her şeyi alırım.

Belki satır sonu için bir çeşit Dropnot $? (ama işe yaramadı).

Yanıtlar:


5

locateSeçilen dosya türünü (dizin gibi) bulmak için kullanma seçeneği yoktur , ancak sorunuzdaki sözdizimini kullanabilirsiniz - Dropnot$biten satırları bulmak için Dropnot. Bunun için -ePOSIX normal ifadesini açmak üzere bulma seçeneğini kullanmanız gerekir .

Bu durumda şunları kullanmalısınız:

locate -e Dropnot$

Bulma sürümünün hangi sürümüne sahip olmanız önemlidir. Sistemimde (Gentoo Linux) Güvenli Konumum var:

$ locate --version
Secure Locate 3.1 - Released March 7, 2006

cevap olarak bir --basenameseçenek yok uther. Bu seçenek, finduils paketinden GNU Loca tarafından sağlanır:

$ ./locate --version
locate (GNU findutils) 4.4.2

Eğer regexp'yi GNU Loc ile kullanmak istiyorsanız -rbunun yerine switch'i kullanmalısınız -e.


1
-eseçenek değil only print entries for currently existing filesmi?
phuclv

10

Ben var mlocateyüklü. RedHat tarafından varsayılan olarak dağıtılır, bu nedenle Fedora, RHEL, CentOS'ta olacaktır. itibarenman 1 locate

-b, --basename
       Match  only  the  base  name  against the specified patterns. This 
       is the opposite of --wholename.

Bu nedenle locate -b '\Dropknot', yalnızca tam olarak bu dizeye sahip dosyaları veya dizinleri bildirir.

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.

locate -b /Dropnotçalıştı
Michael Durrant

4

GNU locate ile (diğer locate uygulamaları farklı olabilir):

locate '*/Dropnot'
locate Dropnot | grep '/Dropnot$'

Bağımsız değişkende joker karakter yoksa, locatebelirtilen arama terimini alt dize olarak içeren bir yol arar. Argüman bir veya daha fazla joker karakter içeren bir kabuk deseni olduğunda, locatetam bir eşleşme arar. /DropnotSonunda çıktı almak istemiyorsanız :

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'

0

RedHat kullanıyorsanız, muhtemelen Güvenli Bul değil mlocate'i yüklediniz. Bu durumda -e seçeneği yoktur ve temel düzenli ifadeleri kullanarak arama yapmak için -r veya --regexp kullanmanız gerekir.


0

Slackware slocatevarsayılan olarak aşağıdaki seçenekle normal ifade araması kullanır r :

locate -r '/Dropnot$'

adlı dizinleri arayacaktır Dropnot.

Bu, örneğin, yalnızca numaralıDropnot dizinleri (Dropnot1, Dropnot2, vb.) Arar:

locate -r '/Dropnot[[:digit:]]\+$'

0

Kimsenin neden böyle bir şey önermediğini bilmiyorum:

for i in $(locate MYDIR); do [ -d "$i" ] && echo $i; done

Bu sadece konum dizelerinin herhangi birinin bir dizin olup olmadığını kontrol eder ve yazdırır

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.