Có thể tìm kiếm một sự kết hợp thư mục / tập tin?


12

Tôi cần tìm một hình ảnh, giả sử ABC.jpg, mà tôi biết sẽ được lập trình đặt vào một thư mục có tên ABC_MPSC. Tôi đã thử:

cd /
find . -name "ABC_MPSC/ABC.jpg"

Nhưng điều đó không trả lại bất cứ điều gì (tôi thực sự biết nơi cụ thể mà tôi đang tìm kiếm, vì vậy tôi biết nó tồn tại). Có một lệnh find có thể cho phép tôi không phải tìm kiếm thủ công không?



2
Bạn cũng có thể tìm thấy nó bằng cách sử dụng locate, nó sẽ nhanh hơn đáng kể, nhưng chỉ hoạt động nếu tệp đã tồn tại khi updatedblần chạy cuối cùng.
Simon Richter

Câu trả lời:


17

Có một -pathvị ngữ rất hữu ích ở đây:

find . -path '*/ABC_MPSC/ABC.jpg'

Các POSIX mô tả cho vị đó là:

Chính sẽ đánh giá là đúng nếu tên đường dẫn hiện tại khớp với mẫu bằng cách sử dụng ký hiệu khớp mẫu được mô tả trong Ký hiệu khớp mẫu. Các quy tắc bổ sung trong Mẫu được sử dụng cho Mở rộng tên tệp không áp dụng vì đây là thao tác khớp, không phải là mở rộng.

Lý do mà bạn -name "ABC_MPSC/ABC.jpg"thất bại là vì -namevị ngữ:

sẽ đánh giá là đúng nếu tên cơ sở của tên đường dẫn hiện tại khớp với mẫu

Nói cách khác, -namekhông bao giờ thấy thư mục của tên tệp hiện tại, chỉ có tên tệp cơ sở (ví dụ ABC.jpg).


10

Hai cách (ngoài việc sử dụng-path ):

  1. Tìm thư mục, sau đó phát hiện tệp:

    find / -type d -name 'ABC_MPSC' -exec test -f {}/ABC.jpg \; -print
    

    Điều này phụ thuộc vào việc findtriển khai để mở rộng {}sang tên đường dẫn hiện tại của thư mục tìm thấy, mặc dù nó được nối với /ABC.jpg(không bắt buộc phải làm điều đó). Nó cũng có thể được viết là

    find / -type d -name 'ABC_MPSC' \
        -exec sh -c 'test -f "$1"/ABC.jpg' sh {} \; -print
    
  2. Tìm tệp, sau đó kiểm tra tên thư mục mẹ:

    find / -type f -name 'ABC.jpg' -exec sh -c '
        case $(dirname "$1") in
            */ABC_MPSC) exit 0 ;;
            *) exit 1
        esac' sh {} \; -print
    

Cả hai lựa chọn thay thế này sẽ chậm hơn so với sử dụng -paththeo cách mà Jeff thể hiện. Tôi để chúng ở đây làm ví dụ không hơn không kém, vì chúng có thể thích nghi với những thứ khác.

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.