tìm thư mục loại trừ


13

Tôi đang dùng Linux (Ubuntu) và tôi muốn loại trừ một số thư mục nhất định (như .hg) khi tôi đang làm

find | less  

Tôi đã thử cách sau để loại trừ thư mục .hg khỏi danh sách, nhưng dường như không hoạt động.

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

Làm cách nào để loại trừ .directorytrong lệnh find

Câu trả lời:


13

Trong nghiên cứu cho một findgiải pháp tương tự, tôi phát hiện ra lời giải thích hữu ích về Cách sử dụng tùy chọn '-prune' của 'find' trong sh? bởi Laurence Gonsalves .

Bạn có thể sử dụng một cái gì đó như:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

hoặc (không có tên)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)

Các dấu ngoặc đơn (đã thoát) \(\)nhóm các phép thử ( typename) và các hành động tương ứng ( pruneprint, tương ứng) với nhau bên trái và bên phải của OR ( -o).

-ocó mức độ ưu tiên thấp hơn vị trí kề nhau, bạn có thể bỏ qua dấu ngoặc đơn nếu muốn. Nhiều findtriển khai cũng cho phép bạn bỏ qua trận chung kết -print.

find . -type d -name .hg -prune -o -type f -name "foo" -print

1
Tôi đã định viết giải pháp của mình, nhưng dường như chính xác điều này. Cá nhân tôi đã đặt -prunebên trong bộ dấu ngoặc đầu tiên và bộ -type f -printthứ hai, chỉ để làm cho và / hoặc các hoạt động rõ ràng hơn, nhưng nếu không thì điều này có vẻ đúng với tôi.
me_and

Tôi đã cải thiện dấu ngoặc đơn (và lý luận của họ) nhờ nhận xét của @me_and.
fheub

2

Hãy xem tại ack: http://betterthangrep.com/

Ngoài việc có một bộ thư mục loại trừ mặc định hợp lý (ví dụ .hg là loại trừ mặc định), thật dễ dàng để loại trừ các thư mục mới:

ack --ignore-dir=.directory search_term

Để đưa điều này trở lại trường hợp sử dụng của bạn khi bạn đang tìm kiếm danh sách các tệp, bạn sẽ sử dụng -ftùy chọn này, như trong:

ack -f --ignore-dir=.directory

Tôi đã chuyển từ viết các lệnh tìm kiếm / tìm kiếm phức tạp sang các lệnh ack đơn giản.

Mẹo: Đặt các tùy chọn dòng lệnh thường được sử dụng (ví dụ: các thư mục được loại trừ) vào tệp .ackrc.


Dựa trên find | lesscâu hỏi, OP đang tìm kiếm một danh sách các tập tin đơn giản. Làm thế nào điều này giúp với điều đó?
CVn

@ MichaelKjorling Như tôi đã nói trong câu trả lời của mình, tùy chọn -f cung cấp danh sách các tệp.
Brian Leathem

-2

bạn co thể thử

find \( ! -regex '.*/\.directory\(\|/.*\)' \)

Khá chắc chắn rằng điều này không giống như những gì OP yêu cầu.
me_and

Tôi chỉ nghĩ đây là ý của anh ấy.directory
yuyichao
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.