คำถามติดแท็ก xargs

xargs เป็นคำสั่งที่เรียกใช้งานคำสั่งอื่นและสร้างอาร์กิวเมนต์จาก stdin

6
จำเป็นต้องใช้ xargs เมื่อใด
xargsคำสั่งมักจะสร้างความสับสนให้ฉัน มีกฎทั่วไปหรือไม่ ลองพิจารณาสองตัวอย่างด้านล่าง: $ \ls | grep Cases | less พิมพ์ไฟล์ที่ตรงกับ 'กรณี' แต่การเปลี่ยนคำสั่งtouchจะต้องxargs: $ \ls | grep Cases | touch touch: missing file operand Try `touch --help' for more information. $ \ls | grep Cases | xargs touch

4
เรียงลำดับผลลัพธ์ของ“ ค้นหา” หรือไม่
ฉันต้องสามารถเรียงลำดับเอาต์พุตตามตัวอักษรfindก่อนที่จะไพพ์ไปยังคำสั่ง การเข้า| sort |ระหว่างไม่ทำงานฉันควรทำอย่างไร find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
77 shell  find  sort  xargs 

2
ทำให้ xargs ผ่านเป็นพารามิเตอร์ตัวแรก
ฉันพยายามที่จะสร้างพฤติกรรมนี้: grep 192.168.1 *.txt โดยการส่งผ่านสตริงไปยัง grep ผ่าน Xargs แต่มันจะไปที่จุดสิ้นสุดแทนที่จะเป็นพารามิเตอร์ตัวแรก echo 192.168.1 | xargs grep *.txt ฉันต้องบอก xargs (หรือบางอย่างที่คล้ายกัน) เพื่อใส่สตริงที่เข้ามาระหว่าง 'grep' และ '*' แทนที่จะเป็นที่สิ้นสุด ฉันจะทำสิ่งนี้ได้อย่างไร
53 xargs 

7
การใช้ xargs กับอินพุตจากไฟล์
สมมติว่าฉันมีไฟล์ดังต่อไปนี้ bob john sue ตอนนี้เหล่านี้ corrospond โดยตรงไป (ในกรณีนี้) รูปแบบ URL เช่นhttp://example.com/persons/bob.tar, ,john.tarsue.tar xargsผมอยากจะใช้เส้นเหล่านี้และเรียกพวกเขาผ่าน ฉันไม่รู้ว่าสิ่งใดที่ส่งผ่านไปยังคำสั่งที่ถูกเรียกใช้งาน ฉันจะเข้าถึงพารามิเตอร์ได้อย่างไรจากพรอมต์ (บอกว่าฉันต้องการสะท้อนแต่ละบรรทัดเช่นcat file | xargs echo $PARAM) หรือจากสคริปต์ทุบตี
41 bash  scripting  xargs 

1
GNU parallel vs & (ฉันหมายถึงพื้นหลัง) vs xargs -P
ฉันสับสนเกี่ยวกับความแตกต่างหรือข้อได้เปรียบ (ถ้ามี) ของการใช้งานชุดหนึ่งใน.shสคริปต์โดยใช้GNU parallel คำตอบของEg Ole Tange : parallel ./pngout -s0 {} R{} ::: *.png &แทนที่จะพูดบ่วงผ่านพวกเขาวางไว้ในพื้นหลัง คำตอบของFrostschutzเช่น: #copied from the link for illustration for stuff in things do ( something with stuff ) & done wait # for all the something with stuff ในระยะสั้นพวกเขามีเพียง syntactically หรือจริงแตกต่างกันอย่างไร และถ้าแตกต่างกันจริงเมื่อฉันควรใช้แต่ละ

3
ไพพ์คำสั่งหลังจาก xargs ไพพ์
HP-UX ***** B.11.23 U ia64 **** ใบอนุญาตผู้ใช้ไม่ จำกัด find . -type d -name *log* | xargs ls -la ให้ฉันชื่อไดเรกทอรี (คนที่มีlogอยู่ในชื่อไดเรกทอรี) ตามด้วยไฟล์ทั้งหมดในไดเรกทอรีนั้น ไดเรกทอรี /var/opt/SID/application_a/log/, /var/opt/SID/application_b/log/, /var/opt/SID/application_c/log/และอื่น ๆ ประกอบด้วยไฟล์บันทึก ฉันต้องการเพียงสอง logfiles ล่าสุดที่จะแสดงตามคำสั่งซึ่งผมมักจะพบการใช้lsls -latr | tail -2 ผลลัพธ์จะต้องมีลักษณะเช่นนี้ .. /var/opt/SID/application_a/log/ -rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1 -rw-rw-rw- 1 user1 user1 …
38 shell  find  pipe  xargs 


4
find -exec + vs find | xargs: อันไหนให้เลือก?
ผมเข้าใจว่า-execสามารถใช้ตัวเลือกในการเลียนแบบพฤติกรรมของ+ xargsมีสถานการณ์ใดบ้างที่คุณต้องการให้ฟอร์มหนึ่งเหนืออีกฟอร์มหนึ่ง? ฉันมักจะชอบแบบฟอร์มแรกถ้าเพียงเพื่อหลีกเลี่ยงการใช้ท่อ ฉันคิดว่านักพัฒนาของfindต้องทำการเพิ่มประสิทธิภาพที่เหมาะสม ฉันถูกไหม?
32 bash  find  pipe  xargs 

4
ฉันจะค้นหาไฟล์แล้วใช้ xargs เพื่อย้ายไฟล์ได้อย่างไร
ฉันต้องการค้นหาไฟล์และย้ายไฟล์ ฉันสามารถค้นหาไฟล์ด้วย: $ find /tmp/ -ctime -1 -name x* ฉันพยายามย้ายพวกเขาไปยัง~/playไดเรกทอรีของฉันด้วย: $ find /tmp/ -ctime -1 -name x* | xargs mv ~/play/ แต่นั่นไม่ได้ผล mv ต้องมีสองอาร์กิวเมนต์ ไม่แน่ใจว่าจะอ้างอิงรายการปัจจุบันของ xargs (หรือวิธี) ในคำสั่ง mv หรือไม่
28 find  rename  xargs 

5
ทำไม xargs ตัดเครื่องหมายคำพูดออกจากอินพุต
ทำไม xargs ตัดเครื่องหมายคำพูดออกจากข้อความอินพุต นี่คือตัวอย่างง่าย ๆ : echo "/Place/='http://www.google.com'" | xargs echo เอาท์พุท /Place/=http://www.google.com มีวิธีการแก้ไขปัญหานี้หรือไม่? (xargs -0 ไม่ช่วยฉัน)

5
วิธีทำให้ `xargs 'ไม่สนใจการออกจากเด็กและดำเนินการต่อไป
บางครั้งฉันทำงานนานมากในxargsชั่วข้ามคืนและมันน่ารำคาญจริง ๆ ที่ค้นพบในตอนเช้าที่xargsเสียชีวิตตรงกลางตัวอย่างเช่นเกิดจากความผิดพลาดในการแบ่งเซ็กเมนต์ในกรณีพิเศษหนึ่งกรณีเช่นเดียวกับที่เกิดขึ้นในคืนนี้ หากแม้กระทั่งxargsเด็กหนึ่งคนถูกฆ่าก็จะไม่ดำเนินการอินพุตอีกต่อไป: คอนโซล 1: [09:35:48] % seq 40 | xargs -i --max-procs=4 bash -c 'sleep 10; date +"%H:%M:%S {}";' xargs: bash: terminated by signal 15 09:35:58 3 09:35:58 4 09:35:58 2 <Exit with code 125> คอนโซล 2: [09:35:54] kill 5601 ฉันสามารถป้องกันไม่ให้xargsหยุดเพื่อประมวลผลอินพุตอีกต่อไปเมื่อกระบวนการลูกตายและดำเนินการแทนต่อไปได้หรือไม่?
24 kill  xargs  signals 

4
หา + xargs: อาร์กิวเมนต์ยาวเกินไป
ฉันมีสายเหมือนดังต่อไปนี้: find /foo/bar -name '*.mp4' -print0 | xargs -i {} -0 mv -t /some/path {} แต่ฉันได้รับข้อผิดพลาดต่อไปนี้: xargs: argument line too long ฉันสับสน. การใช้ที่xargsควรจะช่วยอย่างแม่นยำกับปัญหานี้ไม่ใช่หรือ หมายเหตุ:ฉันรู้ว่าฉันสามารถใช้เทคโนโลยี-execในการค้นหา แต่ฉันต้องการที่จะเข้าใจว่าทำไมข้างต้นล้มเหลวเนื่องจากความเข้าใจของฉันคือที่xargsควรรู้วิธีการแยกอินพุตเป็นขนาดที่จัดการได้เพื่อโต้แย้งว่ามันทำงาน สิ่งนี้ไม่จริงหรือ นี่คือทั้งหมดที่มี zsh
21 xargs  arguments 

6
xargs พร้อมการเปลี่ยนเส้นทาง stdin / stdout
ฉันต้องการที่จะทำงาน: ./a.out < x.dat > x.ans สำหรับแต่ละ * .datไฟล์ในไดเรกทอรี แน่นอนว่ามันสามารถทำได้โดย bash / python / สคริปต์ใด ๆ แต่ฉันชอบเขียนเซ็กซี่หนึ่งซับ ทั้งหมดที่ฉันสามารถเข้าถึงคือ (ยังไม่มี stdout ใด ๆ ): ls A/*.dat | xargs -I file -a file ./a.out แต่-a in xargs ไม่เข้าใจแทนที่ 'ไฟล์' str ขอบคุณสำหรับความช่วยเหลือ.


1
แปลงบรรทัดใหม่เป็นตัวคั่น null เมื่อใช้ tail
ฉันจะเปลี่ยนผลลัพธ์จากtailการใช้บรรทัดที่สิ้นสุดด้วย null แทนการขึ้นบรรทัดใหม่ได้อย่างไร คำถามของฉันคล้ายกับคำถามนี้: จะทำอย่างไร "หัว" และ "หาง" บนอินพุตที่มีการคั่นด้วย null ในทุบตี? แต่สิ่งที่ฉันต้องการทำมีดังนี้: tail -f myFile.txt | xargs -i0 myCmd {} "arg1" "arg2" ฉันไม่ได้ใช้findและใช้ไม่ได้-print0 ทั้งหมดนี้เพื่อหลีกเลี่ยงข้อผิดพลาดที่เกิดขึ้นใน xargs: xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option

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