ฉันต้องการที่จะทราบความหมายของ{} +ใน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 {} \;
คำตอบ:
การใช้;(อัฒภาค) หรือ+(บวก) มีผลบังคับใช้ในคำสั่งยกเลิกคำสั่งเปลือกเรียกโดย/-execexecdir
ความแตกต่างระหว่าง;(เซมิโคลอน) หรือ+(เครื่องหมายบวก) คือวิธีที่อาร์กิวเมนต์ส่งผ่านไปยัง 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)รายละเอียดมากใคร ๆ ก็สามารถหาได้ง่าย อย่าขี้เกียจ