diff bentween xargs คืออะไรพร้อมเครื่องหมายปีกกาและไม่อยู่ใน linux


19

ฉันอยากรู้ว่าอะไรคือความแตกต่างระหว่างสิ่งนี้

ls | xargs rm

ls | xargs -i{} rm {}

ทั้งคู่ทำงานเพื่อฉัน

คำตอบ:


19

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นี้เพื่อรับแนวคิดเพิ่มเติมเกี่ยวกับมัน


ใครดีกว่ากัน

1
@ user19140477031 ขึ้นอยู่กับสิ่งที่คุณกำลังดำเนินการ เพราะrmมันไม่สำคัญ
Shiplu Mokaddim

3

ด้วยเครื่องมือจัดฟันมันจะวางไข่หนึ่งrmกระบวนการต่อไฟล์ หากไม่มีเครื่องหมายปีกกาxargsจะส่งชื่อไฟล์ให้มากที่สุดเท่าที่จะทำได้สำหรับแต่ละrmคำสั่ง

เปรียบเทียบ

ls | xargs echo

และ

ls | xargs -i echo '{}'

2

ตัวเลือก -i (เทียบเท่ากับ - แทนที่) สร้างการเรียงลำดับของตัวยึดตำแหน่งที่ xargs เก็บข้อมูลที่เพิ่งได้รับ ในคำสั่งที่สองของคุณตัวยึดตำแหน่งคือ "{}" มันทำงานเหมือนหาตัวเลือก -exec เมื่อกำหนดแล้ว xargs จะแทนที่ตัวยึดตำแหน่งนี้ด้วยอินพุตทั้งหมด หากคุณไม่ชอบชื่อ "{}" คุณสามารถกำหนดชื่อของคุณเอง:

ls | xargs -iPLACEHOLDER echo PLACEHOLDER

ในกรณีของคุณทั้งสองคำสั่งให้ผลลัพธ์เหมือนกัน ในรูปแบบที่สองคุณเพิ่งทำพฤติกรรมเริ่มต้นอย่างชัดเจนด้วยตัวเลือก -i

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