วิธีการใช้ตรรกะหรือในการค้นหา?


12

ใน bash shell lsสามารถใช้ฟังก์ชัน OR แบบลอจิคัลหรือผ่าน (แน่นอนฉันสามารถทำได้ls name1 name2แต่ตัวอย่างจริงของฉันซับซ้อนกว่า):

ls @(name1|name2)

มีวิธีการทำเช่นนี้โดยใช้find?

การปฏิบัติที่ไร้เดียงสาของฉัน:

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

ไม่ทำงาน (มันไม่มีผลอะไร)


4
คุณอ่านOPERATORSส่วนของfindmanpage หรือไม่?
ขับขี่เหล็ก

คำตอบ:


19

คุณสามารถใช้สำหรับตรรกะ-o ORอย่างไรก็ตามระวังว่าเพรดิเคตทั้งหมดfindจะมีค่าตรรกะดังนั้นโดยปกติคุณจะต้องจัดกลุ่มORสิ่งต่าง ๆ พร้อมกับ parens และเนื่องจาก parens ยังมีความหมายต่อเชลล์คุณจึงต้องหลบหนีด้วย:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.