คำตอบ:
glob ที่ไม่มีเครื่องหมายจะถูกขยายโดยเชลล์ก่อนที่จะfind
ถูกเรียกใช้งาน (อ้างอิงถึงการขยายชื่อไฟล์ในคู่มือ)
ดังนั้นพูดว่า:
find . -name *.pyc -delete
จะดำเนินการจริง:
find . -name file1.pyc file2.pyc file3.pyc -delete
สมมติว่ามีไฟล์ 3 ไฟล์. pyc ในไดเรกทอรีปัจจุบันและทำให้เกิดข้อผิดพลาดแทน
แบ็กสแลชทำให้เชลล์ส่งผ่าน glob ไปยังfind
นั่นคือทำหน้าที่เหมือน*.pyc
ถูกยกมา
เป็นการดีที่คุณควรจะอ้างอิงวงกว้าง:
find . -name '*.pyc' -delete
ก่อนที่เปลือกของคุณประเด็นfind
คำสั่งก็จะทำต่างๆขยาย การทำเช่นนั้นมันยังประมวลผลอักขระพิเศษ (หรือตัวละครที่มีความหมายพิเศษ) ซึ่ง*
เป็นสัญลักษณ์แทน - ตัวอักษรกลม นี่คือการขยายชื่อไฟล์ที่เรียกว่า
สมมติว่าคุณมีสองไฟล์ในไดเรกทอรีของคุณ:
foo.pyc
bar.pyc
จากนั้น*.pyc
จะขยายเป็นชื่อทั้งสอง ดังนั้นถ้าคุณเขียน:
find . -name *.pyc -delete
จากนั้นเชลล์จะเรียกจริง:
find . -name foo.pyc bar.pyc -delete
ซึ่งไม่สมเหตุสมผลนักเนื่องจากคุณสามารถมีข้อโต้แย้งเพียงข้อเดียว-name
เท่านั้น นั่นเป็นเหตุผลที่คุณต้องหลบหนีอักขระพิเศษเพื่อป้องกันไม่ให้ถูกตีความโดยเชลล์ คุณทำเช่นนั้นโดยการใช้เครื่องหมายแบคสแลชหรือหลีกเลี่ยงการอ้างถึง
find
ควรมีส่วนที่เรียกNON-BUGS
พร้อมกับสิ่งที่คล้ายกันเป็นตัวอย่างและคำอธิบายว่าทำไมจึงมีความจำเป็น