วงเล็บปีกกาเหล่านี้ถูกปล่อยทิ้งไว้โดยลำพัง พวกเขาเป็นของfindและxargsตามลำดับและอธิบายไว้ในหน้าคนของพวกเขา
man find
-exec คำสั่ง ;
ดำเนินการคำสั่ง ; เป็นจริงถ้าส่งคืนสถานะ 0 ข้อโต้แย้งต่อไปนี้ทั้งหมดเพื่อหาจะถูกนำไปเป็นข้อโต้แย้งคำสั่งจนกว่าจะมีการโต้แย้งซึ่งประกอบด้วย;พบ สตริง{}จะถูกแทนที่ด้วยชื่อไฟล์ปัจจุบันกำลังดำเนินการทุกที่มันเกิดขึ้นในการขัดแย้งกับคำสั่งที่ไม่เพียง findแต่ในการขัดแย้งที่มันเป็นคนเดียวในขณะที่บางรุ่น ทั้งสองสิ่งก่อสร้างเหล่านี้อาจจำเป็นต้องหลบหนี (ด้วย\) หรืออ้างเพื่อป้องกันพวกเขาจากการขยายตัวโดยเปลือก ดูส่วนตัวอย่างสำหรับตัวอย่างของการใช้-execตัวเลือก คำสั่งที่ระบุ
ถูกเรียกใช้ครั้งเดียวสำหรับแต่ละไฟล์ที่ตรงกัน คำสั่งจะถูกดำเนินการในไดเรกทอรีเริ่มต้น มีปัญหาด้านความปลอดภัยที่หลีกเลี่ยงไม่ได้รอบการใช้-exec
แอคชัน คุณควรใช้-execdirตัวเลือกแทน
-exec คำสั่ง {} +
การ-execกระทำที่แตกต่างนี้รันคำสั่งที่ระบุในไฟล์ที่เลือก แต่บรรทัดคำสั่งจะถูกสร้างโดยการต่อท้ายชื่อไฟล์ที่เลือกแต่ละชื่อที่ท้าย จำนวนการร้องขอคำสั่งทั้งหมดจะน้อยกว่าจำนวนไฟล์ที่ตรงกัน บรรทัดคำสั่งสร้างขึ้นในลักษณะเดียวกับที่xargsสร้างบรรทัดคำสั่ง อนุญาตหนึ่งอินสแตนซ์ของ{}ภายในคำสั่ง คำสั่งจะถูกดำเนินการในไดเรกทอรีเริ่มต้น หากfindพบข้อผิดพลาดบางครั้งอาจทำให้เกิดการออกทันทีดังนั้นบางคำสั่งที่รอดำเนินการอาจไม่สามารถทำงานได้เลย ชุดตัวเลือกนี้-execจะคืนค่าเป็นจริงเสมอ
-execdir คำสั่ง ;
-execdir คำสั่ง {} +
ไลค์ -execแต่คำสั่งที่ระบุรันจากไดเร็กทอรีย่อยที่มีไฟล์ที่จับคู่ซึ่งโดยปกติจะไม่ใช่ไดเร็กทอรีที่คุณเริ่มต้นค้นหา วิธีนี้มีความปลอดภัยมากขึ้นสำหรับการเรียกใช้คำสั่งเนื่องจากจะหลีกเลี่ยงสภาวะการแข่งขันในระหว่างการแก้ปัญหาพา ธ ไปยังไฟล์ที่ตรงกัน เช่นเดียวกับการ -exec ดำเนินการ
+ รูปแบบ -execdir จะสร้างบรรทัดคำสั่งเพื่อประมวลผลไฟล์ที่ตรงกันมากกว่าหนึ่งไฟล์ แต่การเรียกใช้คำสั่งที่กำหนดใด ๆ จะแสดงรายการไฟล์ที่มีอยู่ในไดเรกทอรีย่อยเดียวกันเท่านั้น หากคุณใช้ตัวเลือกนี้คุณต้องแน่ใจว่า$PATHตัวแปรสภาพแวดล้อมของคุณไม่ได้อ้างอิง.; ผู้โจมตีจะสามารถเรียกใช้คำสั่งใด ๆ -execdirที่พวกเขาต้องการโดยออกจากไฟล์ที่เหมาะสมที่มีชื่อในไดเรกทอรีที่คุณจะเรียกใช้ เช่นเดียวกับการมีรายการ$PATHที่ว่างเปล่าหรือที่ไม่ใช่ชื่อไดเรกทอรีแน่นอน หากfindพบข้อผิดพลาดบางครั้งอาจทำให้เกิดการออกทันทีดังนั้นบางคำสั่งที่รอดำเนินการอาจไม่สามารถทำงานได้เลย ผลลัพธ์ของการดำเนินการขึ้นอยู่กับว่ามี+การใช้;ตัวแปรหรือ
-execdir คำสั่ง {} +ส่งกลับค่าจริงเสมอในขณะที่-execdir คำสั่ง {} ;กลับเป็นจริงเฉพาะในกรณีที่คำสั่งกลับ 0
man xargs
-I แทนที่-Str
แทนที่การเกิดขึ้นของreplace-strในอาร์กิวเมนต์เริ่มต้นด้วยชื่อที่อ่านจากอินพุตมาตรฐาน นอกจากนี้ช่องว่างที่ไม่มีเครื่องหมายอัญประกาศจะไม่ยุติรายการอินพุต ตัวคั่นเป็นอักขระขึ้นบรรทัดใหม่แทน นัย-xและ-L 1.
-i[ replace-str ], --replace[ =replace-str ]
ตัวเลือกนี้เป็นคำพ้องสำหรับ-Iแทนที่-Strถ้าเปลี่ยน-Strระบุไว้ ถ้าเปลี่ยน-Str-I{}อาร์กิวเมนต์จะหายไปผลที่ออกมาเป็นเช่นเดียวกับ ตัวเลือกนี้เลิกใช้แล้ว ใช้-Iแทน
แก้ไข: และนี่ทำไม bash ละเว้นวงเล็บปีกกาเหล่านั้น:
man bash
{ รายการ; }
รายการ ถูกดำเนินการอย่างง่ายในสภาพแวดล้อมเชลล์ปัจจุบัน รายการจะต้องถูกยกเลิกด้วยการขึ้นบรรทัดใหม่หรืออัฒภาค สิ่งนี้เรียกว่าคำสั่งกลุ่ม สถานะการส่งคืนคือสถานะการออกของรายการ โปรดทราบว่าแตกต่างจาก metacharacters (และ) , {และ}เป็นคำสงวนและต้องเกิดขึ้นเมื่อคำที่สงวนไว้ได้รับอนุญาตให้จดจำได้ เนื่องจากไม่ทำให้เกิดการแบ่งคำจึงต้องแยกออกจากรายการด้วยช่องว่างหรือเชลล์ตัวอักขระอื่น
สำหรับการเน้น: รายการต้องถูกยกเลิกด้วยการขึ้นบรรทัดใหม่หรืออัฒภาค
{}- หมายถึงtargetsการดำเนินการกับfindคำสั่งมันเป็นลบ /rmพบไฟล์