Làm cách nào để tìm (hoặc loại trừ) tất cả các thư mục và thư mục con khớp với một mẫu nhất định (trong Linux)?


17

Tôi đang cố gắng sử dụng lệnh Linux find để tìm tất cả các thư mục và thư mục con không có .svn (thư mục ẩn Subversion) trong đường dẫn của chúng. Tôi chỉ có thể lấy nó để loại trừ các thư mục .svn thực tế, nhưng không có bất kỳ thư mục con nào.

Đây là những gì tôi đang làm ngay bây giờ:

find . -type d \! -iname '*.svn*'

Tôi cũng đã thử:

find . -type d \! iname '.svn' \! iname '.svn/*'

Chỉ là một FYI, tôi đang cố gắng sử dụng mẫu tìm kiếm để tôi có thể áp dụng một số thuộc tính lật đổ cho tất cả các thư mục trong kho lưu trữ của tôi ngoại trừ các thư mục ẩn ẩn và thư mục con của chúng (bằng cách áp dụng lệnh exec cho các thư mục được trả về từ lệnh find ) ..

TIA

Câu trả lời:


25
find . -type d -not \( -name .svn -prune \)

Tôi sẽ đi với cái này, mặc dù tất cả đều có vẻ hiệu quả.
Jason Xuống

Tôi đã sử dụng -prune khi tìm thấy trước đây, nhưng tôi chưa thấy thủ thuật \ (... \) đó. Cảm ơn.
Rory

Bạn có thể cho biết làm thế nào điều này sẽ hoạt động trong một ứng dụng node.js / express nơi tôi muốn loại trừ các mô-đun nút khỏi việc đếm các dòng không? Tôi đã cố gắng find . -name '*.js' -not \( -name 'node_modules' -prune \) | xargs wc -l mà không thành công ...
băm nhỏ

Để đáp ứng với @shrpping liên quan đến các ứng dụng Node.js / Express và loại trừ các thư mục node_modules khỏi kết quả của find, điều này hoạt động với tôi: find. -name ' .test.js ' -not (-wholename '* node_modules ') ... với điều kiện là các bài kiểm tra tôi muốn chạy được kết hợp với ".test.js"
mysterlune

Điều này sẽ làm việc mà không có -type d? Tôi thích tìm kiếm tất cả các tệp nhưng loại trừ thư mục ".git" theo cách đệ quy
James Mitch

6

Đơn giản là gì

find . -type d |  grep -v '.svn'

Mất khả năng sử dụng bất kỳ hành động tìm kiếm nào.
David Pashley

Vâng, nhưng những gì về một vòng lặp sh nhỏ đẹp thay thế? :) cho TẬP TIN find . -type d | grep -v '.svn'; làm vang bất cứ điều gì; xong
wazoox

6

Điều gì về các -pathtùy chọn để tìm?

find . -type d ! -path '*.svn*'

1
Bỏ lỡ một trích dẫn kết thúc. Có một cơ hội bên ngoài rằng các ký tự đại diện có thể quá tham lam.
Dan Carley

2

tìm thấy . -path './tmp' -prune -o .......


2

Bạn đã có thể sử dụng:

find . -type d -not -wholename '*.svn*' 

nó tước * từ phía trước câu trả lời ... nên được tìm thấy. -type d -not -wholename ' /.svn/ ' (đó là wholename squote asterisk slash dot svn slash asterisk squote)
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.