ฉันอยากรู้ว่าอะไรคือความแตกต่างระหว่างสิ่งนี้
ls | xargs rm
ls | xargs -i{} rm {}
ทั้งคู่ทำงานเพื่อฉัน
ฉันอยากรู้ว่าอะไรคือความแตกต่างระหว่างสิ่งนี้
ls | xargs rm
ls | xargs -i{} rm {}
ทั้งคู่ทำงานเพื่อฉัน
คำตอบ:
xargs rm
จะเรียกใช้rm
โดยมีอาร์กิวเมนต์ทั้งหมดเป็นพารามิเตอร์ที่เว้นวรรคด้วยช่องว่าง
xargs -i{} rm {}
จะเรียกใช้rm {}
สำหรับแต่ละอาร์กิวเมนต์และ{}
จะถูกแทนที่ด้วยอาร์กิวเมนต์ปัจจุบัน
ถ้าคุณมี 2 ข้อโต้แย้งa.txt
และb.txt
, xargs rm
จะเรียกสิ่งนี้ว่า
rm a.txt b.txt
แต่xargs -i{} rm {}
จะโทร
rm a.txt
rm b.txt
นี่เป็นเพราะ-i
ตัวเลือกหมายถึง-L 1
ตัวเลือกซึ่งหมายความว่าคำสั่งrm
จะใช้เวลา1
ในแต่ละบรรทัดเท่านั้น และที่นี่แต่ละบรรทัดมีเพียง 1 อาร์กิวเมนต์เท่านั้น
ตรวจสอบลิงค์ Ideoneนี้เพื่อรับแนวคิดเพิ่มเติมเกี่ยวกับมัน
rm
มันไม่สำคัญ
ด้วยเครื่องมือจัดฟันมันจะวางไข่หนึ่งrm
กระบวนการต่อไฟล์ หากไม่มีเครื่องหมายปีกกาxargs
จะส่งชื่อไฟล์ให้มากที่สุดเท่าที่จะทำได้สำหรับแต่ละrm
คำสั่ง
เปรียบเทียบ
ls | xargs echo
และ
ls | xargs -i echo '{}'
ตัวเลือก -i (เทียบเท่ากับ - แทนที่) สร้างการเรียงลำดับของตัวยึดตำแหน่งที่ xargs เก็บข้อมูลที่เพิ่งได้รับ ในคำสั่งที่สองของคุณตัวยึดตำแหน่งคือ "{}" มันทำงานเหมือนหาตัวเลือก -exec เมื่อกำหนดแล้ว xargs จะแทนที่ตัวยึดตำแหน่งนี้ด้วยอินพุตทั้งหมด หากคุณไม่ชอบชื่อ "{}" คุณสามารถกำหนดชื่อของคุณเอง:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
ในกรณีของคุณทั้งสองคำสั่งให้ผลลัพธ์เหมือนกัน ในรูปแบบที่สองคุณเพิ่งทำพฤติกรรมเริ่มต้นอย่างชัดเจนด้วยตัวเลือก -i