it-swarm-vi.com

Cách sử dụng lệnh find để tìm kiếm nhiều tiện ích mở rộng

Tôi có thể nhận được tất cả các hình ảnh jpg bằng cách sử dụng:

find . -name "*.jpg"  

Nhưng làm cách nào tôi có thể thêm các tệp png vào kết quả?

143
wong2

Sử dụng cờ -o Giữa các tham số khác nhau.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) hoạt động như một lá bùa.

GHI CHÚ Ở đó phải là khoảng trắng giữa dấu ngoặc và nội dung của nó hoặc nó đã thắng 't làm việc.

Giải trình:

  • -type f - chỉ tìm kiếm tệp (không phải thư mục)
  • \( & \) - cần thiết cho -type f Để áp dụng cho tất cả các đối số
  • -o - logic OR toán tử
  • -iname - như -name, Nhưng trận đấu không phân biệt chữ hoa chữ thường
176
Shadur

Bạn có thể kết hợp tiêu chí với -o as được đề xuất bởi Shadur . Lưu ý rằng -o có mức độ ưu tiên thấp hơn vị trí kề nhau, vì vậy bạn có thể cần dấu ngoặc đơn.

find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \)  # all .jpg or .png images modified in the past week

Trên Linux, bạn có thể sử dụng -regex để kết hợp các tiện ích mở rộng theo cách chặt chẽ hơn. Cú pháp regrec mặc định là Emacs ( regexps cơ bản cộng với một vài phần mở rộng như \| để luân phiên); có một tùy chọn để chuyển sang regexps mở rộng .

find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'

Trên FreeBSD, NetBSD và OSX, bạn có thể sử dụng -regex kết hợp với -E cho regexps mở rộng.

find -E . -regex '.*\.(jpg|png)'

Điều này đúng hơn:

find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
44
Dimitry

Để làm rõ, tùy chọn duy nhất hoạt động trên hương vị Linux, Unix và macOS là:

find -E . -regex '.*\.(jpg|png)'

Đó là bởi vì phiên bản OS X hơi khác một chút, nhưng điều quan trọng là viết những thứ hoạt động tốt trên hầu hết các nền tảng.

9
sorin