บางครั้งฉันเห็นคำสั่งต่อไปนี้:
find . -name * -exec ls -a {} \;
ฉันถูกขอให้ดำเนินการนี้
ที่{} \;
นี่หมายความว่าอย่างไร
-name *
เลวร้ายยิ่งกว่าซ้ำซ้อน เนื่องจาก*
unquote เชลล์จะขยายไปยังรายการชื่อไฟล์ในโฟลเดอร์ปัจจุบันโดยมีการเว้นวรรคที่ไม่ถูกต้องนำไปสู่ผลลัพธ์ที่ไม่คาดคิดหรือข้อความแสดงข้อผิดพลาด ในฐานะที่เป็นจุดพิเศษfind
มีฟังก์ชั่นมากมายโดยหนึ่งในนั้นคือรายการไฟล์ -exec
หลีกเลี่ยงการนี้ต้องใช้ เช่นคุณสามารถใช้หรือfind . -print
find . -ls
สุดท้ายมีสองวิธีที่จะหลบหนีกึ่งลำไส้ใหญ่: ทั้งที่คุณทำกับเครื่องหมาย, หรือโดยการอ้าง:\;
';'
ใช้สิ่งที่คุณรู้สึกสะดวกสบายมากขึ้นด้วย
-name *
ซ้ำซ้อน