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

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

1
วิธีการทำ 'หัว' และ 'หาง' ในอินพุตที่มีการ จำกัด ด้วย null ในทุบตี?
findคำสั่งสามารถส่งออกชื่อของไฟล์เป็นสตริงที่คั่นด้วย null (ถ้า-print0มีให้) และxargsสามารถใช้พวกเขาด้วยการ-0เปิดตัวเลือก แต่ในระหว่างมันเป็นเรื่องยากที่จะจัดการกับคอลเลกชันของไฟล์ - sortคำสั่งมี-zสวิทช์ที่ทำให้มันเป็นไปได้ที่จะจัดเรียงไฟล์เหล่านั้น แต่headและtailไม่ได้พวกเขา ฉันจะทำheadและtailป้อนข้อมูลด้วยตัวคั่นที่ไม่มีค่าในวิธีที่สะดวกได้อย่างไร (ฉันสามารถสร้างสคริปต์ทับทิมสั้นและช้าได้เสมอ แต่ฉันหวังว่าอาจมีวิธีที่ดีกว่า)

3
“ รายการอาร์กิวเมนต์ยาวเกินไป”: ฉันจะจัดการกับมันได้อย่างไรโดยไม่เปลี่ยนคำสั่งของฉัน
เมื่อฉันเรียกใช้คำสั่งเช่นls */*/*/*/*.jpgฉันได้รับข้อผิดพลาด -bash: /bin/ls: Argument list too long ฉันรู้ว่าทำไมสิ่งนี้เกิดขึ้น: มันเป็นเพราะมีข้อ จำกัด เคอร์เนลกับจำนวนพื้นที่สำหรับการขัดแย้งกับคำสั่ง คำแนะนำมาตรฐานคือการเปลี่ยนคำสั่งที่ฉันใช้เพื่อหลีกเลี่ยงการต้องใช้พื้นที่มากสำหรับการขัดแย้ง (เช่นใช้findและxargs) ถ้าฉันไม่ต้องการเปลี่ยนคำสั่งล่ะ? ถ้าฉันต้องการใช้คำสั่งเดียวกันต่อไป ฉันจะทำสิ่งต่าง ๆ "แค่ทำงาน" โดยไม่ได้รับข้อผิดพลาดนี้ได้อย่างไร มีโซลูชั่นอะไรบ้าง?

2
xargs: การใช้อาร์กิวเมนต์เดียวกันในหลายคำสั่ง
กำลังพยายามเขียนหนึ่งซับที่สามารถตรวจสอบเอาต์พุตdf -hและแจ้งเตือนเมื่อพาร์ติชันหนึ่งว่าง [หรือเกือบ] ของพื้นที่ ตอนนี้มันเป็นส่วนที่ใช้ xargs ที่เตะฉันในตูดตอนนี้ ... echo 95 | xargs -n1 -I{} [ {} -ge 95 ] && echo "No Space on disk {}% full -- remove old backups please" ฉันจะทำให้ส่วนที่สอง {} แสดง "95" ได้อย่างไร

2
วิธีการหยุด xargs จากการรวมเอาท์พุทจากกระบวนการหลายอย่างไม่ดี?
ฉันกำลังใช้xargsกับตัวเลือก--max-args=0(หรือ-P 0) อย่างไรก็ตามเอาต์พุตของกระบวนการถูกรวมเข้ากับstdoutสตรีมโดยไม่คำนึงถึงการแยกบรรทัดที่เหมาะสม ดังนั้นฉันมักจะจบลงด้วยบรรทัดเช่น: <start-of-line-1><line-2><end-of-line-1> ในขณะที่ฉันใช้egrepกับ^ในรูปแบบของฉันในxargsผลลัพธ์ทั้งหมดนี้จะทำให้สับสนผลลัพธ์ของฉัน มีวิธีบังคับxargsให้เขียนผลลัพธ์ของกระบวนการตามลำดับ (คำสั่งใด ๆ ตราบใดที่ผลลัพธ์ของหนึ่งกระบวนการนั้นต่อเนื่องกัน)? หรือวิธีการแก้ปัญหาอื่น ๆ ? แก้ไข:รายละเอียดเพิ่มเติมเกี่ยวกับกรณีการใช้งาน: ฉันต้องการดาวน์โหลดและแยกหน้าเว็บจากโฮสต์ที่แตกต่างกัน เนื่องจากทุกหน้าใช้เวลาประมาณหนึ่งวินาทีในการโหลดและมีหน้าเว็บไม่กี่โหลที่ฉันต้องการขนานการร้องขอ คำสั่งของฉันมีแบบฟอร์มต่อไปนี้: echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \ wget -q -O- http://{}/somepage.html | egrep --count '^string' ฉันใช้ bash และไม่ใช่อย่าง Perl เพราะ host IP (ตัวแปร $ IP) และข้อมูลอื่น ๆ …

6
ทำไม xargs ทำให้ apt-get ยกเลิก?
ฉันกำลังพยายามลบรายการแพคเกจจากไฟล์ ฉันใช้คำสั่งต่อไปนี้: cat packages | xargs sudo apt-get remove packagesไฟล์ของฉันมีรายการแพ็คเกจที่ฉันต้องการลบหรือไม่ ทุกอย่างดูเหมือนจะทำงานได้ แต่apt-getยกเลิกแทนที่จะให้ฉันเลือกใช่หรือไม่ ฉันรู้ว่าฉันสามารถหลีกเลี่ยงสิ่งนี้ได้ด้วย-yตัวเลือก แต่ฉันอยากจะรู้ว่าทำไมสิ่งนี้จึงเกิดขึ้นและฉันจะเลือกตัวเลือกแบบโต้ตอบได้อย่างไร
17 apt  xargs 

2
ฉันจะรับ xargs เพื่อแสดงบรรทัดคำสั่งที่สร้างโดยไม่ต้องรันได้อย่างไร
คำสั่ง linux จำนวนพอสมควรมีตัวเลือกการรันแบบแห้งซึ่งจะแสดงให้คุณเห็นว่าพวกเขากำลังทำอะไรโดยไม่ทำ ฉันไม่เห็นอะไรเลยในหน้า man ของ xargs ที่ทำสิ่งนั้นและไม่มีวิธีที่ชัดเจนในการลอกเลียนแบบ (กรณีการใช้งานเฉพาะของฉันคือการแก้ไขปัญหาท่อยาว แต่ฉันแน่ใจว่ามีคนอื่น ๆ ) ฉันพลาดอะไรไปรึเปล่า?
17 xargs 

3
bash find xargs grep ปรากฏเพียงครั้งเดียวเท่านั้น
อาจจะแปลกไปหน่อยและบางทีอาจมีเครื่องมืออื่นที่จะทำเช่นนี้ แต่ก็ .. ฉันใช้คำสั่ง bash แบบคลาสสิคต่อไปนี้เพื่อค้นหาไฟล์ทั้งหมดที่มีสตริง: find . -type f | xargs grep "something" ฉันมีไฟล์จำนวนมากในหลายระดับ การเกิดขึ้นครั้งแรกของ "บางสิ่ง" นั้นเพียงพอสำหรับฉัน แต่การค้นหายังคงค้นหาอยู่และใช้เวลานานในการทำให้ไฟล์ที่เหลือเสร็จสมบูรณ์ สิ่งที่ฉันต้องการจะทำคือการ "ตอบกลับ" จาก grep back เพื่อค้นหาเพื่อให้การค้นหาสามารถหยุดการค้นหาไฟล์เพิ่มเติมได้ เป็นไปได้ไหม
16 bash  find  grep  xargs 

1
วิธีการใช้ฟังก์ชั่นที่กำหนดไว้ด้วย xargs
นี่คือรหัสของฉัน #!/bin/bash showword() { echo $1 } echo This is a sample message | xargs -d' ' -t -n1 -P2 showword ดังนั้นฉันจึงมีฟังก์ชั่นshowwordที่สะท้อนสิ่งที่คุณส่งผ่านสายเป็นพารามิเตอร์ไปยังฟังก์ชั่น จากนั้นฉันได้xargsลองเรียกใช้ฟังก์ชั่นแล้วส่งต่อทีละหนึ่งคำไปยังฟังก์ชั่นแล้วเรียกใช้ฟังก์ชัน 2 ชุดพร้อมกัน สิ่งที่ไม่ทำงานคือxargsไม่รู้จักฟังก์ชั่น ฉันจะบรรลุสิ่งที่ฉันพยายามทำได้อย่างไรฉันจะทำให้ xargs ทำงานกับฟังก์ชันได้showwordอย่างไร
16 bash  xargs  function 

2
มีวิธีการใช้ xargs ข้ามท่อหรือไม่?
ฉันพยายามแปลงไฟล์ flac ที่ย้ายไปยังโฟลเดอร์เป็น mp3 ในโฟลเดอร์อื่นโดยอัตโนมัติ บรรทัดรหัสปัจจุบันของฉันคือ: inotifywait -m -r -q -e moved_to --format "'%w%f'" ~/test | xargs -I x flac -cd x - | lame -b 320 - /media/1tb/x.mp3 เพื่ออธิบายวิธีการใช้งานจนถึงตอนนี้ inotifywait จอภาพ ~ / ทดสอบวนซ้ำสำหรับไฟล์ที่ย้ายไปที่นั่นเอาท์พุทพา ธ และชื่อไฟล์ไปยังไพพ์ xargs ใช้ชื่อนั้นและสร้างคำสั่ง flac ที่เหมาะสมแทนที่ x ด้วยชื่อไฟล์และถอดรหัสไฟล์ไปยังไพพ์อื่น ในไปป์ใหม่ประมวลผลเอาต์พุตของ flac เป็น mp3 ภายใต้ / สื่อ …
15 shell  pipe  xargs  inotify 

6
วิธีค้นหาคำในเนื้อหาทั้งหมดของไดเรกทอรีใน linux
ต้องค้นหาบางสิ่งในเนื้อหาทั้งหมด ฉันกำลังพยายาม: find . | xargs grep word ฉันได้รับข้อผิดพลาด: xargs: อัญประกาศ ทำอย่างไรจึงจะได้สิ่งนี้?
15 linux  shell  grep  find  xargs 

3
วิธีอ้างอาร์กิวเมนต์ด้วย xargs
สมมติว่าฉันต้องการลบไฟล์ทั้งหมดในโฟลเดอร์ที่มีขนาดใหญ่กว่า 1 MB $ find . -size +1M | xargs -0 rm นี่จะไม่ลบไฟล์ที่มีพื้นที่ว่างในชื่อ rmดังนั้นผมจึงต้องการที่จะพูดขัดแย้งทั้งหมดส่งไปยัง ถ้าfindให้มันSome report.docxมันควรจะผ่านไป"Some report.docx"rm ฉันจะทำสิ่งนั้นได้อย่างไร
15 shell  find  quoting  rm  xargs 

2
ทำไมคำสั่ง xargs นี้ไม่ทำงาน
ฉันต้องการลบส่วนขยาย. sh ทั้งหมดเพื่อทำสิ่งนี้: ls *.sh | xargs -I {} mv {} `basename {} .sh` อย่างไรก็ตามมันไม่ทำงานมันจะทำงานเหมือนbasenameส่งคืนชื่อไฟล์ที่ไม่เปลี่ยนแปลง ทำไมมันเป็นเช่นนั้น ตัวอย่างเช่นงานนี้: ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`; แก้ไข : วิธีแก้ไข: อัญประกาศเดี่ยวป้องกัน`basename ...`การประเมินผลโดยเชลล์ก่อนที่คำสั่งจะรัน ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'

2
ไปป์ไลน์เพื่อ xargs
ฉันมีสคริปต์ที่ในบางสถานการณ์อาจไม่มีอะไรใน stdout ในตอนท้ายของสคริปต์ฉันผ่านบรรทัดที่ฉันมีไปยังคำสั่งอื่นโดยใช้ xargs ปัญหาของฉันคือเมื่อไม่มีอะไรใน stdout ฉันได้รับข้อความแสดงข้อผิดพลาด "การใช้งาน: โปรแกรม arg1 arg2" ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร
14 bash  xargs 

5
มี xargs ใช้นามแฝงแทนไบนารี
Bash 4.2 บน CentOS 6.5: ในตัวฉัน~/.bash_profileฉันมีนามแฝงมากมายรวมไปถึง: alias grep='grep -n --color=always' grepเพื่อที่ฉันจะได้รับการเน้นสีและพิมพ์หมายเลขบรรทัดโดยอัตโนมัติเมื่อใช้งาน หากฉันเรียกใช้สิ่งต่อไปนี้การเน้นงานเป็นไปตามที่คาดไว้ $ grep -Re 'regex_here' *.py อย่างไรก็ตามเมื่อฉันวิ่งเร็ว ๆ นี้: $ find . -name '*.py' | xargs grep -E 'regex_here' ผลที่ไม่ได้เน้นและหมายเลขบรรทัดไม่ถูกพิมพ์, บังคับให้ฉันกลับไปและเพิ่มอย่างชัดเจน-n --color=alwaysกับgrepคำสั่ง ไม่xargsอ่านนามแฝงในสภาพแวดล้อมหรือไม่? ถ้าไม่มีมีวิธีที่จะทำเช่นนั้นหรือไม่?
14 bash  alias  xargs 

1
ฉันจะรับดัชนีของ "หน่วยประมวลผลแบบขนาน" xargs ได้อย่างไร?
สมมติว่าฉันมีสองทรัพยากรชื่อ0และ1ที่สามารถเข้าถึงได้เท่านั้น มีวิธีใดในการกู้คืน "ดัชนี" ของ "ตัวประมวลผลแบบขนาน" ที่xargsเปิดตัวเพื่อใช้เป็นบริการการยกเว้นซึ่งกันและกันฟรี เช่นพิจารณาการคำนวณแบบขนานต่อไปนี้: $ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {}" consuming task 1 consuming task 2 consuming task 3 consuming task 4 consuming task 5 consuming task 6 consuming task 7 consuming task 8 คำถามของฉันคือว่ามีคำวิเศษพูดว่าindexที่ผลลัพธ์จะมีลักษณะ $ echo …

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