Tìm tệp có phần mở rộng nhất định


67

Làm cách nào tôi có thể sử dụng findđể tìm tất cả các tệp có phần mở rộng .xlshoặc .csvphần mở rộng? Tôi đã thấy một -regextùy chọn nhưng tôi không biết làm thế nào để sử dụng nó.

Câu trả lời:


115

Tại sao không chỉ đơn giản là sử dụng này:

find -name "*.xls" -o -name "*.csv"

Bạn không cần regex cho việc này.

Nếu bạn thực sự muốn sử dụng regex chỉ cần sử dụng

find -regex ".*\.\(xls\|csv\)"

8
Câu trả lời tốt hơn của tôi. +1.
Paul Tomblin

1
Tại sao dấu gạch chéo ngược cần thiết trước dấu ngoặc đơn? Tôi biết nó không hoạt động mà không có nó, nhưng có vẻ như nó nên.

1
bởi vì chúng là biểu thức chính quy của emacs theo mặc định. sử dụng -regextype để thay đổi điều đó.

4
Chỉ để ghi lại: Tôi không bao giờ có thể nhớ công cụ nào muốn "\ (" để nhóm và muốn "(". Tôi luôn phải thử để biết điều đó.
Joachim Sauer

1
ví dụ regex không hoạt động
nhà

12
find . \( -name  \*.xls -o -name \*.csv \) -print

Không biết về tùy chọn -o. Cảm ơn!

1
Nó có cần dấu ngoặc đơn không? tìm thấy . '(' -name * .xls -o -name * .csv ')' - in

@Adrian - không, không. Tôi không chắc liệu nó có cần parens trên một non-GNU không trong đó "-print" không phải là hành động mặc định.
Paul Tomblin

5
Chà, GNU find (mặc định trên ubfox 11.04) hoạt động chính xác với cả parens và -print OR mà không có (parens và -print). Nhưng find . -name \*.xls -o -name \*.csv -printchỉ xuất ra các tệp khớp với .csv,
bbaja42

Bạn nói đúng, tôi cần parens.
Paul Tomblin
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.