Bagaimana saya bisa menggunakan temukan hanya untuk direktori

10

Ini menemukan sejumlah besar file yang berada di bawah berbagai subdirektori "Dropnot"

$ locate Dropnot

Saya dapat menemukan hanya lokasi direktori dengan locate? (direktori "Dropnot" di mana)

Jadi jika Dropnotada /home/me/, itulah satu-satunya entri yang dikembalikan.

Jika demikian, apa cara paling sederhana / terpendek?

Lebih disukai melalui bendera atau simbol daripada memipis dan mengambilnya, dll, tapi saya akan mengambil apa pun sebagai opsi.

Mungkin semacam Dropnot $ untuk end of line? (tetapi tidak berhasil).

Michael Durrant
sumber

Jawaban:

5

Tidak ada opsi untuk digunakan locateuntuk menemukan jenis file yang dipilih (seperti direktori), tetapi Anda dapat menggunakan sintaks dari pertanyaan Anda - Dropnot$untuk menemukan baris yang diakhiri dengan Dropnot. Untuk itu Anda harus menggunakan -eopsi untuk mencari untuk mengaktifkan ekspresi reguler POSIX.

Dalam hal ini Anda harus menggunakan:

locate -e Dropnot$

Penting untuk mengetahui versi lokasi yang Anda miliki. Di sistem saya (Gentoo Linux) saya memiliki Lokasi Aman:

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

di mana tidak ada --basenameopsi dari utherjawaban. Opsi ini disediakan oleh GNU Locate dari paket findutils:

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

Jika Anda ingin menggunakan regexp dengan GNU Locate, Anda harus menggunakan -rsakelar -e.

pbm
sumber
1
bukan -epilihan only print entries for currently existing files?
phuclv
10

Saya telah mlocatemenginstal Ini adalah default yang didistribusikan oleh RedHat, sehingga akan berada di Fedora, RHEL, CentOS. Dariman 1 locate

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

Jadi jika Anda menjalankannya locate -b '\Dropknot', itu hanya akan melaporkan file atau direktori dengan string yang persis sama.

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.
George M.
sumber
locate -b /Dropnotbekerja
Michael Durrant
4

Dengan lokasi GNU (implementasi lokasi lain mungkin berbeda):

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

Saat tidak ada wildcard dalam argumen, locatecari jalur yang memiliki istilah pencarian yang ditentukan sebagai substring. Ketika argumennya adalah pola shell yang mengandung satu atau lebih karakter wildcard, locatecari pasangan yang lengkap. Jika Anda tidak ingin menampilkan /Dropnotdi akhir:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
0

Jika Anda menggunakan RedHat, Anda mungkin sudah menginstal mlocate bukan Secure Locate. Dalam hal ini tidak ada opsi -e dan Anda harus menggunakan -r atau --regexp untuk mencari menggunakan ekspresi reguler dasar.

Jistanidiot
sumber
0

Slackware menggunakan slocatesecara default, yang memiliki pencarian regex dengan opsi r :

locate -r '/Dropnot$'

akan mencari direktori bernama Dropnot.

Ini akan mencari misalnya direktori -hanya bernomor sajaDropnot (Dropnot1, Dropnot2, dll):

locate -r '/Dropnot[[:digit:]]\+$'
Skippy le Grand Gourou
sumber
0

Tidak tahu mengapa tidak ada yang mengusulkan hal seperti itu:

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

Ini hanya memeriksa apakah ada string lokasi adalah direktori dan mencetaknya

cy8g3n
sumber