Sử dụng định vị để tìm thư mục


20

Tôi sử dụng định vị mọi lúc để tìm các tệp mà tôi biết tên, xác định vị trí rất nhanh và tôi thích điều đó. Đối với các tệp được tạo gần đây, tìm kiếm rất tuyệt, thông thường với các tệp được tạo gần đây tôi biết cơ bản chúng được tạo ở đâu nên tôi không phải tìm kiếm toàn bộ hệ thống tệp của mình.

Khi tôi quên vị trí của một thư mục tuy nhiên không tìm thấy cũng không xác định vị trí có vẻ lý tưởng.

Định vị luôn phun ra quá nhiều thông tin vì mỗi tệp trong một thư mục cũng phù hợp để định vị. Chẳng hạn, nếu tôi đang tìm kiếm một thư mục có tên log ở đâu đó trên hệ thống tệp của tôi, nhật ký xác định vị trí sẽ trả về hàng tấn kết quả. Nếu tôi làm điều tương tự với find, find / -name log -type d find mất vài phút để chạy và phát ra tất cả các loại lỗi cấp phép mỗi khi nó gặp một thư mục mà nó không thể đọc được.

Có cách nào tốt hơn?

Trả lời: Vì vậy, tôi gắn bó với grep cho đến khi tôi tìm thấy một cái gì đó khác:

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

Câu trả lời:


12

Một cách (tôi nghi ngờ có thể có một cách tốt hơn) là sử dụng grep để chỉ trả về những đường dẫn kết thúc trong tên thư mục của bạn:

locate foldername | grep /foldername$

28

Bạn có thể sử dụng tùy chọn --regex( -r) của locate:

locate -r '/log$'

Có (+1). locatecó khả năng regex tích hợp riêng của nó: -rhoặc --regex... để có đầy đủ các tùy chọn xem: thông tin xác định vị trí
Peter.O

1
Tôi biết phải có một cách tốt hơn!
misterben

Vì vậy, ngắn và nó hoạt động trơn tru. Đóng góp to lớn! Một lý do khác để học / làm chủ các biểu thức chính quy
love.by.Jesus

Bạn không cần cả hai 'trong trường hợp này: locate -r /log$là đủ.
simlev

5

Bạn đã thử chưa:

locate /home/insertusernamehere/*/filename?

hoặc là

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

hoặc bất kỳ biến thể của như vậy?


Câu trả lời này cho thấy điều đó grepkhông cần thiết và như đã thấy trong tùy chọn được đề xuất đầu tiên, không phải là biểu thức chính quy.
Tom

2

Nó đây rồi

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

locatedir $*

1
Nếu bạn có thể giải thích những thay đổi bạn đã thực hiện, nó cũng sẽ hữu ích cho người khác.
Ron
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.