ฉันต้องการที่จะทราบความหมายของ{} +
ในexec
คำสั่งและสิ่งที่เป็นความแตกต่างระหว่างและ{} +
{} \;
ตามจริงแล้วอะไรคือความแตกต่างระหว่างสองสิ่งนี้:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
ฉันต้องการที่จะทราบความหมายของ{} +
ในexec
คำสั่งและสิ่งที่เป็นความแตกต่างระหว่างและ{} +
{} \;
ตามจริงแล้วอะไรคือความแตกต่างระหว่างสองสิ่งนี้:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
คำตอบ:
การใช้;
(อัฒภาค) หรือ+
(บวก) มีผลบังคับใช้ในคำสั่งยกเลิกคำสั่งเปลือกเรียกโดย/-exec
execdir
ความแตกต่างระหว่าง;
(เซมิโคลอน) หรือ+
(เครื่องหมายบวก) คือวิธีที่อาร์กิวเมนต์ส่งผ่านไปยัง find's -exec
/ -execdir
พารามิเตอร์ ตัวอย่างเช่น:
การใช้;
จะดำเนินการหลายคำสั่ง (แยกกันสำหรับแต่ละอาร์กิวเมนต์)
ตัวอย่าง:
$ find /etc/rc* -exec echo Arg: {} ';'
Arg: /etc/rc.common
Arg: /etc/rc.common~previous
Arg: /etc/rc.local
Arg: /etc/rc.netboot
อาร์กิวเมนต์ทั้งหมดต่อไปนี้ที่จะ
find
ถูกนำไปเป็นอาร์กิวเมนต์ของคำสั่งสตริง
{}
จะถูกแทนที่ด้วยชื่อไฟล์ปัจจุบันที่กำลังประมวลผล
การใช้ +
จะดำเนินการคำสั่งที่เป็นไปได้น้อยที่สุด (เนื่องจากมีการรวมอาร์กิวเมนต์เข้าด้วยกัน) มันคล้ายกันมากกับวิธีการxargs
ทำงานของคำสั่งดังนั้นมันจะใช้อาร์กิวเมนต์เป็นจำนวนมากต่อคำสั่งเท่าที่จะทำได้เพื่อหลีกเลี่ยงการเกินขีด จำกัด สูงสุดของอาร์กิวเมนต์ต่อบรรทัด
ตัวอย่าง:
$ find /etc/rc* -exec echo Arg: {} '+'
Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
บรรทัดคำสั่งถูกสร้างโดยการต่อท้ายชื่อไฟล์ที่เลือกแต่ละชื่อที่ท้าย
หนึ่งอินสแตนซ์ของ
{}
ภายในคำสั่ง
ดูสิ่งนี้ด้วย:
ระบุว่าคำสั่ง find จะได้รับไฟล์ต่ำกว่าสามไฟล์:
fileA
fileB
fileC
หากคุณใช้-exec
กับเครื่องหมายบวก ( +
)
find . -type f -exec chmod 775 {} +
มันจะเป็น:
chmod 775 fileA fileB fileC
บรรทัดคำสั่งถูกสร้างโดยการต่อท้ายชื่อไฟล์ที่ตรงกันแต่ละชื่อที่ท้ายซึ่งอยู่ในลักษณะเดียวกันกับที่ xargs
สร้างบรรทัดคำสั่ง จำนวนการเรียกใช้คำสั่งทั้งหมด ( chmod
ในกรณีนี้) จะน้อยกว่าจำนวนไฟล์ที่จับคู่มาก
หากคุณใช้-exec
กับอัฒภาค ( ;
)
find . -type f -exec chmod 775 {} \;
มันจะเป็น:
chmod 775 fileA
chmod 775 fileB
chmod 775 fileC
ตามman find
:
คำสั่ง -exec {} +ตัวแปรของการดำเนินการ -exec นี้รันคำสั่งที่ระบุในไฟล์ที่เลือก แต่บรรทัดคำสั่งจะถูกสร้างโดยการต่อท้ายชื่อไฟล์ที่เลือกแต่ละชื่อที่ท้าย จำนวนการเรียกใช้คำสั่งทั้งหมดจะน้อยกว่าจำนวนไฟล์ที่ตรงกัน บรรทัดคำสั่งถูกสร้างขึ้นในลักษณะเดียวกับที่ xargs สร้างบรรทัดคำสั่ง อนุญาตเพียงหนึ่งอินสแตนซ์ของ '{}' ภายในคำสั่ง คำสั่งจะถูกดำเนินการในไดเรกทอรีเริ่มต้น
man find(1)
รายละเอียดมากใคร ๆ ก็สามารถหาได้ง่าย อย่าขี้เกียจ