Bir dizini bulmak için locate kullanma


20

Kullandığım bulun , ben adını biliyorum dosyaları bulmak için her zaman bulmak çok hızlıdır ve ben seviyorum. Son zamanlarda oluşturulan dosyalar için harika, normalde yeni oluşturulan dosyalar ile temelde nerede oluşturulduğunu biliyorum, böylece tüm dosya sistemimi aramak zorunda kalmam.

Bir dizinin yerini unuttum ancak ne bulmak ne de bulmak ideal görünüyor.

Bir dizindeki her dosya aynı zamanda bir eşleşme olduğu için her zaman bulun çok fazla bilgi verir. Mesela benim dosya sisteminde bir dizin adında günlük bir yere arıyormuşçasına günlük yerini sonuçların tonlarca dönecekti. Find ile aynı şeyi yaparsam, / -name log'unu bul log -type d find, çalıştırılması birkaç dakika sürer ve her türlü izin hatası, okuyamadığı bir klasörle karşılaştığında tükürür.

Daha iyi bir yolu var mı?

Cevap: Öyleyse başka bir şey bulana kadar grep ile takılıyorum:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

Yanıtlar:


12

Bir yöntem (daha iyi bir yol olabileceğinden şüpheleniyorum), yalnızca klasör adınızla biten yolları döndürmek için grep kullanmaktır:

locate foldername | grep /foldername$

28

Seçeneğini --regex( -r) seçeneğini kullanabilirsiniz locate:

locate -r '/log$'

Evet (+1) locatekendine ait regex capablility dahili: -rya --regexseçeneklerinin tam aralığı için ... bkz: bilgi bulmak
Peter.O

1
Daha iyi bir yol olması gerektiğini biliyordum!
misterben

Çok kısa ve sorunsuz çalışıyor. Büyük katkı! Düzenli ifadeler
loved.by.Jesus

'Bu durumda ikisine ihtiyacınız yok : locate -r /log$yeter.
simlev

5

Denedin mi:

locate /home/insertusernamehere/*/filename?

veya

locate file | grep -i '^/home/.*/examplesubdirectory'?

ya da böyle bir değişiklik?


Bu cevap grepgerekli olmadığını ve önerilen ilk seçenekte de görüldüğü gibi regexps olmadığını gösteriyor.
Tom,

2

İşte burada

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

1
Yaptığınız değişiklikleri açıklayabiliyorsanız, bu durum başkaları için de yararlı olacaktır.
Ron,
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.