Làm thế nào để sử dụng logic HOẶC trong tìm kiếm?


12

Trong bash shell lscó thể sử dụng chức năng OR logic thông qua (tất nhiên tôi cũng có thể làm ls name1 name2nhưng các ví dụ thực sự của tôi phức tạp hơn):

ls @(name1|name2)

Có cách nào để làm điều này bằng cách sử dụng find?

Thực hiện ngây thơ của tôi:

find . -maxdepth 1 -name @("name1"|"name2") 

không hoạt động (nó chỉ không có kết quả)


4
Bạn đã đọc OPERATORSphần của findtrang web?
Steeldo

Câu trả lời:


19

Bạn có thể sử dụng -ocho logic OR. Tuy nhiên, hãy coi chừng rằng tất cả các findvị từ đều có giá trị logic, do đó, bạn thường sẽ cần nhóm các ORthứ ed cùng với parens. Và vì parens cũng có ý nghĩa với vỏ, bạn cũng cần phải thoát chúng:

find /some/dir -maxdepth 1 \( -name '*.c' -o -name '*.h' \) -print

5

Để trả lời câu hỏi của bạn, bạn có thể sử dụng -otùy chọn:

   expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.

   expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

như thế này:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
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.