คำสั่ง + in find / path / -exec '{}' + ทำอะไรได้บ้าง


13

อะไร+ในfind /path/ -exec command '{}' +สิ่งที่ต้องทำ? ตรงข้ามกับfind /path/ -exec command '{}' \;

คำตอบ:


17

เครื่องหมาย '+' สร้างบรรทัดคำสั่งหนึ่งบรรทัดใหญ่จากไฟล์ที่พบทั้งหมดเพื่อลดจำนวนคำสั่งที่จะเรียกใช้

ในกรณีที่คำสั่ง find พบไฟล์สี่ไฟล์

find . -type f -exec command '{}' \;

จะผลิต

command file1
command file2
command file3
command file4 

ในทางกลับกัน

find . -type f -exec command '{}' \+

ผลิต

command file1 file2 file3 file4

3
ถ้าคุณรู้ว่าxargs, -exec … {} +ไม่เหมือนกันเป็น-print | xargs …แต่ไม่มีปัญหา quoting ( -print0 | xargs -0เป็นวิธีอื่น แต่มันก็เป็นแบบพกพาน้อยกว่า)
Gilles 'หยุดความชั่วร้าย'

4

จากหน้าคน:

คำสั่ง -exec {} +

ตัวแปรของแอ็คชัน -exec นี้รันคำสั่งที่ระบุบนไฟล์ที่เลือก แต่บรรทัดคำสั่งถูกสร้างโดยการต่อท้ายชื่อไฟล์ที่เลือกแต่ละชื่อที่ท้าย จำนวนการร้องขอคำสั่งทั้งหมดจะน้อยกว่าจำนวนไฟล์ที่ตรงกัน บรรทัดคำสั่งสร้างขึ้นในลักษณะเดียวกับที่ xargs สร้างบรรทัดคำสั่ง อนุญาตเพียงหนึ่งอินสแตนซ์ของ `{} 'ภายในคำสั่ง คำสั่งจะถูกดำเนินการในไดเรกทอรีเริ่มต้น


1
ผู้ชายที่สั้นมาก ... ฉันพบว่ามันขาดความลึกและชัดเจน
xenoterracide

แนวคิดไม่ใช่การวางไข่หนึ่งกระบวนการสำหรับแต่ละไฟล์อย่างสุ่มสี่สุ่มห้า แต่เพื่อรวบรวมชื่อไฟล์เข้าด้วยกันและเรียกคำสั่งน้อยกว่าครั้ง ตัวอย่าง: แทนที่จะสร้างกระบวนการ "rm FILENAME" ที่แตกต่างกัน 3 รายการจะรวบรวมชื่อไฟล์และทำ "rm FILE1 FILE2 FILE2 FILE3"
tante

IIRC บางรุ่นของ xargs มีตัวเลือกในการแบทช์ชื่อเหล่านี้เข้าด้วยกันจนถึงขีด จำกัด ที่ระบุดังนั้นคุณสามารถได้รับประโยชน์จากสิ่งนี้ แต่ยังหลีกเลี่ยงการล้นเมื่อคุณมีรายการขนาดใหญ่เช่นกัน
Kevin Cantu

(ค้นหาตัวเองเป็นภาษาที่เล็ก ๆ น้อย ๆ ที่น่ากลัวของตัวเองทั้งหมด!)
เควิน Cantu

findให้ฉันกึ่ง
แมตต์อเล็กซานเด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.