ทำไมถึงหา -maxdepth 1 พร้อมกับตัวเลือก -a / flag ไม่ส่งคืนผลลัพธ์ใด ๆ บน Linux?


1

ฉันต้องการค้นหาไฟล์ png AND jpg ทั้งหมดและใช้คำสั่งต่อไปนี้และจะไม่มีการส่งคืนผลลัพธ์อย่างไรก็ตามหากฉันแทนที่ -a กับ -o มันแสดงรายการไฟล์ให้ฉัน ทำไมถึงเป็นอย่างนั้น?

`find . -maxdepth 1 \( -iname \*\.png -a -iname \*\.jpg \)

คำตอบ:


2

ข้อผิดพลาดทางตรรกะ สิ่งที่คุณกำลังบอก find คือ:

ค้นหาในโฟลเดอร์นี้ไฟล์ทั้งหมดที่เป็น (PNG และ JPG)

แต่แน่นอนว่าไม่มีไฟล์ที่เป็น ทั้งสอง ในเวลาเดียวกันซึ่งเป็นสาเหตุที่ -o การทำงาน:

ค้นหาในโฟลเดอร์นี้ไฟล์ทั้งหมดที่เป็น (PNG หรือ JPG)

เมื่อสร้างแบบสอบถามเหล่านี้เพียงแค่จินตนาการ find ผ่านแต่ละไฟล์เพื่อทดสอบ จากนั้นนำไปใช้ ตรรกะบูลีน . ตัวอย่างเช่น:

  • พบไฟล์. txt มันไม่ใช่ PNG (เท็จ) และไม่ใช่ JPG (เท็จ) ดังนั้น false & amp; & amp; เท็จ เท่ากับเท็จ

  • พบว่าเป็นไฟล์. png มันเป็น PNG (จริง) และไม่ใช่ JPG (เท็จ) ดังนั้น จริง & amp; & amp; เท็จ เท่ากับเท็จ

  • พบว่าเป็นไฟล์. jpg ไม่ใช่ PNG (เท็จ) และเป็น JPG (จริง) ดังนั้น false & amp; & amp; จริง เท่ากับเท็จ

  • หากคุณใช้ -o สวิตช์และพบไฟล์. png จากนั้นเป็น PNG (จริง) และไม่ใช่ JPG (false) ดังนั้น จริง | | เท็จ เท่ากับจริง


ขอบคุณ slhck ฉันจะสร้างมันอย่างถูกต้องได้อย่างไรเพื่อหาไฟล์ที่เป็น PNG และ JPG เท่านั้น ฉันมีไฟล์นับพันที่เป็นทั้งไฟล์ข้อความเอกสารแปลก ๆ รูปภาพ (PNG, JPG) ฯลฯ
PeanutsMonkey

กับ -o แทน -aเหมือนที่ฉันพูด หากคุณไม่ได้รับผลลัพธ์ใด ๆ แสดงว่าคุณค้นหาผิดไดเรกทอรี
slhck

ดังนั้นจะจัดการกับแต่ละข้อความค้นหาอย่างอิสระหรือไม่เช่น -iname \*\.png ถูกมองว่าเป็น 1 ข้อความค้นหาตามด้วยคำถามที่สอง -iname \*\.jpg?
PeanutsMonkey

ใช่. find จะประเมิน "ข้อความค้นหา" ทั้งสองว่าเป็นความจริงหรือเท็จแล้วรวมผลลัพธ์ของทั้งสองเข้ากับการทดสอบทางตรรกะ หากผลคือ trueพบไฟล์ อย่างที่ฉันเขียนไว้ในตัวอย่างถ้าการทดสอบครั้งแรกคือ true ("มันคือ PNG!") และอันที่สองคือ false ("ไม่ใช่ JPG!") สิ่งนี้จะประเมิน true เมื่อรวมกับตรรกะ or.
slhck

2

-a เป็นตรรกะและหมายถึงชื่อไฟล์จะต้องลงท้ายด้วย. PNG และ. JPG ให้เป็นจริง

-o เป็นตรรกะแบบรวมหรือหมายถึงชื่อไฟล์จะต้องลงท้ายด้วย. PNG หรือ. JPG (หรือทั้งคู่) เป็นจริง


ขอบคุณ parkydr มันจะเป็นอะไรสำหรับทั้ง PNG และ JPG?
PeanutsMonkey

@PeanutsMonkey -o แทน -aตามที่ฉันเขียนไว้ในคำตอบของฉันเช่นกัน
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.