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

ยูทิลิตี้ในระบบปฏิบัติการยูนิกซ์ที่คล้ายกันสำหรับการส่งผ่านข้อโต้แย้งจำนวนมากไปยังโปรแกรมที่สามารถรับข้อโต้แย้งจำนวนเล็กน้อยเท่านั้น


2
เหตุใดจึงจำเป็น xargs
สมมติว่าฉันต้องการลบไฟล์ทั้งหมดในไดเรกทอรียกเว้นไฟล์ที่มีชื่อว่า "notes.txt" ฉันจะทำเช่นนี้กับไปป์ไลน์, ls | grep -v "notes.txt" | xargs rm. เหตุใดฉันจึงต้องการ xargs หากเอาต์พุตของไพพ์ที่สองคืออินพุตที่ rm ควรใช้? เพื่อประโยชน์ในการเปรียบเทียบไปป์ไลน์echo "#include <knowledge.h>" | cat > foo.cแทรกข้อความ echoed ลงในไฟล์โดยไม่ต้องใช้ xargs ท่อสองท่อนี้แตกต่างกันอย่างไร?
25 bash  pipe  xargs  coreutils 


4
แทนที่ xargs -d ใน osx
ใน Linux คุณสามารถใช้xargs -d,เพื่อรันhostnameคำสั่งกับเซิร์ฟเวอร์ที่แตกต่างกันสี่เครื่องที่มีชื่อเรียงลำดับดังนี้: echo -n 1,2,3,4 |xargs -d, -I{} ssh root@www{}.example.com hostname ดูเหมือนว่าคำสั่ง OSX xargs ไม่สนับสนุนพารามิเตอร์ตัวคั่น คุณสามารถบรรลุผลลัพธ์เดียวกันด้วยการจัดรูปแบบที่แตกต่างกันechoหรือผ่านยูทิลิตี้บรรทัดคำสั่งอื่นได้หรือไม่
22 macos  xargs 

2
สร้าง symlink แบบวนซ้ำสำหรับทรีทั้งต้น
ฉันกำลังมองหาคำสั่งที่จะสร้างทรีทั้งหมดของไฟล์ในไดเรกทอรีอื่น ฉันต้องการที่จะมี symlink ทั้งหมดแน่นอน ฉันสามารถทำได้ด้วยการค้นหาและ xargs หรือไม่? ;-)
20 linux  find  xargs  tree 

4
ทำไมสิ่งนี้ไม่ทำงาน “ ls * .txt | xargs cat> all.txt” (ไฟล์ทั้งหมดลงในเอกสาร txt เดี่ยว)
ทำไมสิ่งนี้ไม่ทำงาน ls *.txt | xargs cat > all.txt (ฉันต้องการที่จะเข้าร่วมเนื้อหาของไฟล์ข้อความทั้งหมดลงในไฟล์ 'all.txt' ไฟล์เดียว) ค้นหาด้วย -exec ควรใช้งานได้ แต่ฉันอยากจะเข้าใจไวยากรณ์ xargs จริงๆ ขอบคุณ
20 pipe  cat  xargs 


8
ฉันจะใช้สองพารามิเตอร์พร้อมกันกับ xargs ได้อย่างไร
ฉันต้องการแปลงวิดีโอ แต่ฉันไม่รู้ว่าพวกเขาอยู่ที่ไหนดังนั้นฉันจึงต้องการfindพวกเขา ฉันจะให้ผลลัพธ์และชื่อไฟล์เอาต์พุตแก่FFmpegด้วยได้xargsอย่างไร ฉันพบแล้วว่าฉันสามารถสร้างพารามิเตอร์ทั้งสองด้วยคำสั่งนี้: find . -iname "*.mov" -printf "%p %f\n" ฉันไม่พบสิ่งใดที่เกี่ยวข้องในxargsคู่มือ ฉันต้องการสิ่งนี้: find . -iname "*.mov" -printf "%p %f\n" | xargs ffmpeg -i {param1} -f flv {param2} ฉันจะทำสิ่งนี้ได้อย่างไร

5
จะใช้งานไฟล์มากกว่า 10 ล้านไฟล์ในไดเรกทอรีได้อย่างไร?
ฉันมีไดเรกทอรีที่มี 1,014,491 ไฟล์อยู่ในนั้น จนถึงตอนนี้ฉันได้ลองทำสิ่งต่อไปนี้: for f in ls; do sed -i -e 's/blah/blee/g' $f; done ชนเปลือกของฉันlsอยู่ในทิลด้า แต่ฉันไม่สามารถหาวิธีที่จะทำให้หนึ่ง ls | xargs -0 sed -i -e 's/blah/blee/g' มีจำนวนมากเกินไป sed find . -name "*.txt" -exec sed -i -e 's/blah/blee/g' {} \; ไม่สามารถแยกหน่วยความจำได้อีกแล้ว แนวคิดอื่น ๆ เกี่ยวกับวิธีสร้างคำสั่งชนิดนี้? ไฟล์ไม่จำเป็นต้องสื่อสารกัน ls | wc -lดูเหมือนว่าจะทำงาน (ช้ามาก) ดังนั้นจึงต้องเป็นไปได้
16 bash  find  xargs 

1
xargs -I replace-str ตัวเลือกที่แตกต่าง
จากความเข้าใจของฉันต่อไปนี้ควรมีความหมายเหมือนกันทุกประการ: ls -1 | xargs file {} ls -1 | xargs -I{} file {} หากไม่ได้ระบุตัวเลือก -I ไว้ค่าเริ่มต้นคือ -I {} ฉันต้องการแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและเรียกใช้fileคำสั่งในแต่ละไฟล์ บางแห่งมีช่องว่างในชื่อ อย่างไรก็ตามฉันสังเกตเห็นความแตกต่าง ดูด้านล่าง: $ ls -1 Hello World $ ls -1 | xargs file {} {}: ERROR: cannot open `{}' (No such file or directory) Hello: ERROR: cannot open `Hello' …
16 bash  xargs 


2
xargs - แทนที่ / -I สำหรับอาร์กิวเมนต์เดียว
ฉันพยายามใช้ xargs เพื่อรันคำสั่งสำหรับแต่ละอาร์กิวเมนต์ที่ให้ แต่น่าเสียดายที่แฟล็ก --replace / -I ดูเหมือนจะไม่ทำงานอย่างถูกต้องเมื่อเชื่อมต่อกับ -n ดูเหมือนว่า {} จะขยายไปสู่รายการอาร์กิวเมนต์ทั้งหมดที่อ่านจาก stdin โดยไม่คำนึงถึงตัวเลือก -n น่าเสียดายที่ตัวอย่างทั้งหมดบนเว็บดูเหมือนจะเป็นคำสั่ง (mv, cp, rm) ซึ่งจะใช้อาร์กิวเมนต์หลายตัวที่ {} ถูกขยาย ตัวอย่างเช่นเมื่อทำงาน: echo a b c d | xargs -n 1 -I {} echo derp {} ผลลัพธ์คือ: derp a b c d แต่ฉันคาดว่า: derp a derp b derp c …

4
ค้นหา: -exec vs xargs (aka ทำไม "find | xargs basename" เบรค)
ฉันพยายามค้นหาไฟล์ทั้งหมดบางประเภทที่กระจายอยู่ในไดเรกทอรีย่อยและเพื่อจุดประสงค์ของฉันฉันต้องการชื่อไฟล์เท่านั้น ฉันพยายามลอกส่วนประกอบเส้นทางผ่านbasenameแต่ไม่ได้ทำงานกับxargs: $ find . -name '*.deb' -print | xargs basename basename: extra operand `./pool/main/a/aalib/libaa1_1.4p5-37+b1_i386.deb' Try `basename --help' for more information. ฉันได้รับสิ่งเดียวกัน (ข้อผิดพลาดเดียวกันอย่างแน่นอน) กับรูปแบบอย่างใดอย่างหนึ่งเหล่านี้: $ find . -name '*.deb' -print0 | xargs -0 basename $ find . -name '*.deb' -print | xargs basename {} ในทางกลับกันการทำงานตามที่คาดไว้: $ find . -name '*.deb' …
10 command-line  find  gnu  xargs 


2
Xargs และ Wget หยุดทำงานหลังจากผ่านไปหนึ่งชั่วโมง
ใช้งานสคริปต์กับ Cygwin บน Windows XP พร้อม Dual Core และ 4GB Ram cat url_list.txt | xargs -P50 wget -i ฉันพยายามที่จะลากผ่าน4GBของURL ที่ดาวน์โหลด (ประมาณ 43 ล้านบาท) ใช้งานได้ดีประมาณหนึ่งชั่วโมงจากนั้น Bash shell และการดาวน์โหลดจะหยุดลงแม้ว่าจะมีเพียง 2% ผ่านรายการ URL มีความคิดเห็นอะไรที่ผิดหรือเปล่า? วิธีที่ดีที่สุดในการแก้ปัญหาคือเหตุใดจึงหยุดหลังจากผ่านไปหนึ่งชั่วโมง
8 wget  url  xargs  cat 

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