ฉันรู้ว่าฉันไม่ได้ตอบxargsคำถามโดยตรงแต่ก็คุ้มค่าการกล่าวขวัญfindของ-execตัวเลือก
รับระบบไฟล์ต่อไปนี้:
[root@localhost bokeh]# tree --charset assci bands
bands
|-- Dream\ Theater
|-- King's\ X
|-- Megadeth
`-- Rush
0 directories, 4 files
คำสั่ง find สามารถสร้างขึ้นเพื่อจัดการพื้นที่ใน Dream Theatre และ King's X ดังนั้นเพื่อค้นหามือกลองของแต่ละวงโดยใช้ grep:
[root@localhost]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
ใน-execตัวเลือก{}ย่อมาจากชื่อไฟล์รวมถึงเส้นทาง โปรดทราบว่าคุณไม่จำเป็นต้องหลบหนี
ความแตกต่างระหว่าง-execterminators ของ ( +และ\;) คือ+กลุ่มที่เป็นชื่อไฟล์จำนวนมากที่มันสามารถลงบนบรรทัดคำสั่งเดียว โดยที่\;จะรันคำสั่งสำหรับแต่ละชื่อไฟล์
ดังนั้นfind bands/ -type f -exec grep Drums {} +จะส่งผลให้:
grep Drums "bands/Dream Theater" "bands/Rush" "bands/King's X" "bands/Megadeth"
และfind bands/ -type f -exec grep Drums {} \;จะส่งผลให้:
grep Drums "bands/Dream Theater"
grep Drums "bands/Rush"
grep Drums "bands/King's X"
grep Drums "bands/Megadeth"
ในกรณีgrepนี้มีผลข้างเคียงของการพิมพ์ชื่อไฟล์หรือไม่
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} \;
Drums:Mike Mangini
Drums: Neil Peart
Drums:Jerry Gaskill
Drums:Dirk Verbeuren
[root@localhost bokeh]# find bands/ -type f -exec grep Drums {} +
bands/Dream Theater:Drums:Mike Mangini
bands/Rush:Drums: Neil Peart
bands/King's X:Drums:Jerry Gaskill
bands/Megadeth:Drums:Dirk Verbeuren
แน่นอนgrepเป็นตัวเลือก-hและ-Hจะควบคุมหรือไม่ว่าชื่อไฟล์จะถูกพิมพ์โดยไม่คำนึงถึงวิธีการที่grepเรียกว่า
xargs
xargs ยังสามารถควบคุมว่าไฟล์ Man อยู่บนบรรทัดคำสั่งได้อย่างไร
xargsโดยกลุ่มเริ่มต้นข้อโต้แย้งทั้งหมดลงในหนึ่งบรรทัด เพื่อที่จะทำสิ่งเดียวที่ไม่ใช้-exec \; xargs -lโปรดทราบว่า-tตัวเลือกบอกxargsให้พิมพ์คำสั่งก่อนดำเนินการ
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l -t grep Drums
grep Drums ./bands/Dream Theater
Drums:Mike Mangini
grep Drums ./bands/Rush
Drums: Neil Peart
grep Drums ./bands/King's X
Drums:Jerry Gaskill
grep Drums ./bands/Megadeth
Drums:Dirk Verbeuren
ดูว่า-lตัวเลือกนั้นบอกให้ xargs เรียกใช้ grep สำหรับทุกชื่อไฟล์
กับค่าเริ่มต้น (เช่นไม่มี-lตัวเลือก):
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush ./bands/King's X ./bands/Megadeth
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
xargsมีการควบคุมที่ดีขึ้นเกี่ยวกับจำนวนไฟล์ที่สามารถอยู่ในบรรทัดคำสั่ง ให้-lตัวเลือกจำนวนไฟล์สูงสุดต่อคำสั่ง
[root@localhost bokeh]# find ./bands -type f | xargs -d '\n' -l2 -t grep Drums
grep Drums ./bands/Dream Theater ./bands/Rush
./bands/Dream Theater:Drums:Mike Mangini
./bands/Rush:Drums: Neil Peart
grep Drums ./bands/King's X ./bands/Megadeth
./bands/King's X:Drums:Jerry Gaskill
./bands/Megadeth:Drums:Dirk Verbeuren
[root@localhost bokeh]#
เห็นว่ากำลังดำเนินการมีสองชื่อไฟล์เพราะgrep-l2
ls |grep mp3 |sed -n "7p"ใช้ก็สามารถecho "Lemon Tree.mp3"ใช้ได้