วงเล็บปีกกาเหล่านี้ถูกปล่อยทิ้งไว้โดยลำพัง พวกเขาเป็นของ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
พบไฟล์