Як використовувати логічний АБО у пошуку?


12

У bash shell lsможна використовувати логічну функцію АБО через (звичайно, я можу це зробити, ls name1 name2але мої справжні приклади є складнішими):

ls @(name1|name2)

Чи є спосіб зробити це за допомогою find?

Моя наївна реалізація:

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

не працює (просто нічого не видає)


4
Ви читали OPERATORSрозділ сторінки find?
steeldriver

Відповіді:


19

Ви можете використовувати -oдля логічного OR. Однак остерігайтеся, що всі findпредикати мають логічні значення, тому зазвичай потрібно групувати ORречі разом з паронами. А оскільки парени також мають значення для оболонки, вам також потрібно буде уникнути їх:

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

5

Щоб відповісти на запитання, ви можете скористатися -oопцією:

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

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

подобається це:

$ find . -maxdepth 1 -name "name1" -o -name "name2"
./name1
./name2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.