Menggunakan temukan untuk menemukan direktori

20

Saya menggunakan temukan sepanjang waktu untuk menemukan file yang saya tahu nama, temukan sangat cepat dan saya suka itu. Untuk file yang baru dibuat, temukan hebat, biasanya dengan file yang baru dibuat saya tahu di mana pada dasarnya mereka dibuat jadi saya tidak perlu mencari seluruh sistem file saya.

Ketika saya lupa lokasi direktori namun tidak menemukan atau menemukan yang tampak ideal.

Locate selalu memuntahkan terlalu banyak informasi karena setiap file dalam direktori juga cocok untuk ditemukan. Sebagai contoh jika saya sedang mencari direktori bernama log di suatu tempat di sistem file saya, log lokasi akan mengembalikan berton-ton hasil. Jika saya melakukan hal yang sama dengan find, find / -name log -type d menemukan butuh beberapa menit untuk menjalankan dan meludahkan segala macam kesalahan izin setiap kali menemukan folder yang tidak dapat dibaca.

Apakah ada cara yang lebih baik?

Jawab: Jadi saya bertahan dengan grep sampai saya menemukan sesuatu yang lain:

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

Jawaban:

12

Cara (saya menduga mungkin ada cara yang lebih baik) adalah menggunakan grep untuk mengembalikan hanya path yang berakhir di nama folder Anda:

locate foldername | grep /foldername$
misterben
sumber
28

Anda dapat menggunakan opsi --regex( -r) dari locate:

locate -r '/log$'
Florian Diesch
sumber
Ya (+1). locatememiliki kemampuan regex built-in sendiri: -ratau --regex... untuk berbagai pilihan, lihat: info
loc
1
Saya tahu pasti ada cara yang lebih baik!
misterben
Begitu singkat dan itu bekerja dengan lancar. Kontribusi luar biasa! Alasan lain untuk belajar / menguasai ekspresi reguler
dicintai.Yesus
Anda tidak perlu keduanya 'dalam hal ini: locate -r /log$sudah cukup.
simlev
5

Sudahkah Anda mencoba:

locate /home/insertusernamehere/*/filename?

atau

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

atau variasi seperti itu?

RolandiXor
sumber
Jawaban ini menunjukkan bahwa grepitu tidak perlu, dan seperti terlihat pada opsi yang disarankan pertama, tidak ada regexps.
Tom
2

Ini dia

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

locatedir $*
Linuxuser
sumber
1
Jika Anda dapat menjelaskan perubahan apa yang telah Anda buat, itu akan sangat membantu untuk perubahan lainnya.
Ron