Làm thế nào để loại trừ các thư mục Proc và sys khỏi tìm kiếm bằng lệnh find?


10

Tôi muốn thực thi một tập lệnh chọn ra một đường dẫn thư mục ngẫu nhiên:

find / -type d | shuf -n1 

Thật không may, tôi nhận được thông báo lỗi về việc cấm nhập các thư mục nhất định.

Làm thế nào tôi có thể loại trừ một thư mục từ tìm kiếm với find?

Câu trả lời:


13

Để loại trừ các đường dẫn cụ thể, trên Linux:

find / -path /sys -prune -o -path /proc -prune -o -type d

Một cách tiếp cận khác là bảo findkhông tái diễn dưới các hệ thống tập tin khác nhau.

find / -xdev -type d

Bạn cũng có thể sử dụng định vị để truy vấn cơ sở dữ liệu tên tệp (thường được cập nhật hàng đêm, bạn cũng có thể cập nhật thủ công bằng cách sử dụng updatedb) thay vì hệ thống trực tiếp.

locate '*' | shuf -n 1

tuyệt vời, ngắn gọn và sâu sắc. find / -xdev -type d tự hoạt động, nhưng find / -xdev -type d | shuf -n 1 hiển thị thông báo lỗi.
Abdul Al Hazred

1
@AbdulAlHazred bạn chưa nói những tin nhắn nào nhưng tôi đoán chúng là lỗi "bị từ chối cấp phép". Hoặc chạy lệnh với quyền root hoặc chỉ bỏ qua các lỗi bằng cách gửi chúng đến stderr : find / -xdev -type d 2>/dev/null.
terdon

1
Bạn không thể làm find / \( -path /sys -o -path /proc \) -prune -o -type dsẽ hữu ích nếu bạn muốn loại trừ nhiều thư mục như /devhoặc /tmp, v.v.
BrainStone

6

với GNU find, bạn cũng có thể sử dụng các tùy chọn regex, ví dụ như thế này:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d

đó là cách tiếp cận đẹp nhất, bởi đến nay (rant: vì vậy có một tùy chọn gnu mà làm cho tìm / có thể sử dụng trên gnu linux như trên bất kỳ hệ điều hành khác mà không có một thực hiện shitty / proc ;-)
Florian Heigl
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.