Làm thế nào tôi có thể sử dụng chỉ định vị cho một thư mục


10

Điều này tìm thấy một số lượng lớn các tệp nằm dưới các thư mục con khác nhau của "Dropnot"

$ locate Dropnot

Tôi có thể tìm chỉ vị trí thư mục với locate? (thư mục "Dropnot" nằm trong)

Vì vậy, nếu Dropnotlà trong /home/me/, đó là mục duy nhất được trả lại.

Nếu vậy, cách đơn giản nhất / ngắn nhất là gì?

Tốt nhất là thông qua một lá cờ hoặc biểu tượng thay vì rút ra và gre cho nó, vv, nhưng tôi sẽ lấy bất cứ điều gì làm tùy chọn.

Có lẽ một số loại Dropnot $ cho cuối dòng? (nhưng không hoạt động).

Câu trả lời:


5

Không có tùy chọn để sử dụng locateđể tìm loại tệp đã chọn (như thư mục), nhưng bạn có thể sử dụng cú pháp từ câu hỏi của mình - Dropnot$để tìm các dòng kết thúc bằng Dropnot. Vì vậy, bạn phải sử dụng -etùy chọn để định vị để bật biểu thức chính quy POSIX.

Trong trường hợp này, bạn nên sử dụng:

locate -e Dropnot$

Điều quan trọng là phiên bản xác định vị trí bạn có. Trong hệ thống của tôi (Gentoo Linux) tôi có Định vị an toàn:

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

trong đó không có --basenametùy chọn từ uthercâu trả lời. Tùy chọn này được cung cấp bởi GNU Locate từ gói findutils:

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

Nếu bạn muốn sử dụng regrec với GNU Locate, bạn nên sử dụng -rswitch thay thế -e.


1
không phải là -elựa chọn only print entries for currently existing files?
phuclv

10

Tôi đã mlocatecài đặt. Nó là mặc định được phân phối bởi RedHat, vì vậy nó sẽ có trên Fedora, RHEL, CentOS. Từman 1 locate

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

Vì vậy, nếu bạn chạy locate -b '\Dropknot', nó sẽ chỉ báo cáo các tệp hoặc thư mục với chính xác chuỗi đó.

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

locate -b /Dropnotđã làm việc
Michael Durrant

4

Với định vị GNU (việc triển khai định vị khác có thể khác):

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

Khi không có ký tự đại diện trong đối số, hãy locatetìm một đường dẫn có cụm từ tìm kiếm được chỉ định làm chuỗi con. Khi đối số là một mẫu vỏ có chứa một hoặc nhiều ký tự đại diện, hãy locatetìm một kết quả khớp hoàn chỉnh. Nếu bạn không muốn xuất /Dropnotkết thúc:

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

0

Nếu bạn đang sử dụng RedHat, có lẽ bạn đã cài đặt mlocate không Định vị an toàn. Trong trường hợp đó, không có tùy chọn -e và bạn phải sử dụng -r hoặc --regrec để tìm kiếm bằng các biểu thức chính quy cơ bản.


0

Slackware sử dụng slocatetheo mặc định, có tìm kiếm regex với tùy chọn r :

locate -r '/Dropnot$'

sẽ tìm kiếm các thư mục có tên Dropnot.

Điều này sẽ tìm kiếm, ví dụ như các thư mục chỉ được đánh sốDropnot (Dropnot1, Dropnot2, v.v.):

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

0

Không biết tại sao không ai đề xuất một cái gì đó như thế:

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

Điều này chỉ kiểm tra nếu bất kỳ chuỗi định vị là một thư mục và in nó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.