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
}

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$

28

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

locate -r '/log$'

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?


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 $*

1
Jika Anda dapat menjelaskan perubahan apa yang telah Anda buat, itu akan sangat membantu untuk perubahan lainnya.
Ron
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.