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

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

7
xargs และ vi -“ อินพุตไม่ได้มาจากเทอร์มินัล”
ฉันมีphp.iniไฟล์ประมาณ 10 ไฟล์ในระบบของฉันตั้งอยู่ทั่วทุกที่และฉันต้องการเรียกดูไฟล์เหล่านั้นอย่างรวดเร็ว ฉันลองคำสั่งนี้: locate php.ini | xargs vi แต่viเตือนฉันInput is not from a terminalแล้วคอนโซลก็เริ่มแปลกจริง ๆ - หลังจากนั้นฉันต้องกด:q!เพื่อออกจากviนั้นตัดการเชื่อมต่อจากเซสชัน ssh และเชื่อมต่อใหม่เพื่อให้คอนโซลทำงานได้ตามปกติอีกครั้ง ฉันคิดว่าฉันเข้าใจว่าเกิดอะไรขึ้นที่นี่ - โดยทั่วไปคำสั่งยังไม่เสร็จเมื่อviเริ่มต้นดังนั้นคำสั่งอาจไม่เสร็จและviไม่คิดว่าเทอร์มินัลอยู่ในโหมดปกติ ฉันไม่รู้ว่าจะแก้ไขอย่างไร ฉันค้นหา Google และยัง unix.stackexchange.com ด้วยโชคไม่ดี

5
วิธีการลบคำสั่งในประวัติศาสตร์ที่ตรงกับสตริงที่กำหนด?
ฉันต้องลบคำสั่งทั้งหมดในประวัติของฉันที่ตรงกับสตริง ฉันได้พยายาม: $ history | grep searchstring | cut -d" " -f2 | history -d -bash: history: -d: option requires an argument $ history | grep searchstring | cut -d" " -f2 | xargs history -d xargs: history: No such file or directory $ temparg() { while read i; do …

9
กระจาย stdin ไปยังกระบวนการแบบขนาน
ฉันมีงานที่ประมวลผลรายการไฟล์ใน stdin เวลาเริ่มต้นของโปรแกรมมีความสำคัญและระยะเวลาที่แต่ละไฟล์ใช้กันอย่างกว้างขวาง ฉันต้องการที่จะวางไข่เป็นจำนวนมากในกระบวนการเหล่านี้จากนั้นส่งงานไปยังที่ใดก็ตามที่ไม่ยุ่ง มีเครื่องมือ commandline ที่แตกต่างกันหลายอย่างที่เกือบจะทำในสิ่งที่ฉันต้องการฉัน จำกัด ให้เหลือสองตัวเลือกที่ใช้งานได้ find . -type f | split -n r/24 -u --filter="myjob" find . -type f | parallel --pipe -u -l 1 myjob ปัญหาก็คือsplitการปัดเศษบริสุทธิ์ดังนั้นหนึ่งในกระบวนการที่ได้รับข้างหลังและอยู่ข้างหลังล่าช้าการดำเนินการทั้งหมดเสร็จสมบูรณ์; ในขณะที่parallelต้องการวางไข่หนึ่งกระบวนการต่อ N บรรทัดหรือไบต์ของอินพุตและฉันปิดท้ายการใช้จ่ายเวลามากเกินไปในการเริ่มต้นค่าใช้จ่าย มีบางอย่างเช่นนี้ที่จะใช้กระบวนการและฟีดบรรทัดไปยังกระบวนการใดก็ตามที่มี stdins ที่ไม่ถูกบล็อก


4
ฉันจะได้รับบรรทัดทั้งหมดด้วย `wc -l 'ได้อย่างไร
ฉันได้เพิ่มนามแฝง git เพื่อให้การนับจำนวนบรรทัดของไฟล์เฉพาะในประวัติของฉัน: [alias] lines = !lc() { git ls-files -z ${1} | xargs -0 wc -l; }; lc อย่างไรก็ตามwc -lมีการรายงานผลรวมหลายรายการเช่นถ้าฉันมีมากกว่า ~ 100k บรรทัดจะรายงานยอดรวมสำหรับพวกเขาจากนั้นก็จะดำเนินการต่อ นี่คือตัวอย่าง: <100k บรรทัด (เอาต์พุตที่ต้องการ) $ git lines \*.xslt 46 packages/NUnit-2.5.10.11092/doc/files/Summary.xslt 232 packages/NUnit-2.5.10.11092/samples/csharp/_UpgradeReport_Files/UpgradeReport.xslt 278 total > 100k บรรทัด (ต้องไปที่ท่อgrep "total") $ git lines \*.cs | grep "total" …
12 files  xargs  wc 

2
ใช้ xargs เพื่อ grep หลายรูปแบบ
ฉันมีไฟล์ที่มีคำที่ฉันต้องการ grep โดยแต่ละคำจะเป็นหนึ่งบรรทัดในไฟล์ ฉันคิดว่าฉันสามารถทำได้ด้วย xargs สิ่งที่ฉันสามารถรวบรวมได้จากตัวอย่างจากหน้าคนแบบนี้ find ./work -print0 | xargs -0 rm คือ xargs ผนวกเอาต์พุตของคำสั่ง pre-pipe ต่อท้ายอาร์กิวเมนต์ ดังนั้นหากพบว่ากลับมาแล้วจะสร้างreport.doc xargs rm report.docความเข้าใจนี้ถูกต้องหรือไม่ ดังนั้นเนื่องจากฉันต้องการค่าในไฟล์ของฉันที่จะอยู่ตรงกลางของคำสั่ง grep ฉันต้องระบุตัวแทน ในการเล่นฉันพยายาม{}แต่มันไม่ทำงาน: $> cat strings.txt | xargs grep {} subdirectory/* grep: string1: No such file or directory grep: string2: No such file or directory xargs เป็นเครื่องมือที่ใช่หรือไม่ …
12 grep  xargs 

10
ลบคำที่ซ้ำกันทั้งหมดออกจากสตริงโดยใช้เชลล์สคริปต์
ฉันมีสตริงเหมือน "aaa,aaa,aaa,bbb,bbb,ccc,bbb,ccc" ฉันต้องการลบคำที่ซ้ำกันออกจากสตริงจากนั้นผลลัพธ์จะเป็นเช่นนั้น "aaa,bbb,ccc" ฉันลองรหัสนี้แหล่งที่มา $ echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs มันทำงานได้ดีกับค่าเดียวกัน แต่เมื่อฉันให้ค่าตัวแปรแล้วมันจะแสดงคำที่ซ้ำกันทั้งหมดด้วย ฉันจะลบค่าที่ซ้ำกันได้อย่างไร UPDATE คำถามของฉันคือการเพิ่มค่าที่สอดคล้องกันทั้งหมดลงในสตริงเดียวถ้าผู้ใช้เหมือนกันฉันมีข้อมูลเช่นนี้ -> user name | colour AAA | red AAA | black BBB | red BBB | blue AAA | blue AAA | red …

4
ฉันจะใช้ `find 'เพื่อไปยังไดเรกทอรีของไฟล์นั้นได้อย่างไร
ฉันต้องการค้นหาไฟล์จากนั้นป้อนไดเรกทอรีที่มีไฟล์ ฉันพยายามfind /media/storage -name "Fedora" | xargs cdแต่แน่นอนฉันis not a directoryผิดพลาด ฉันจะป้อนไดเรกทอรีหลักด้วยคำสั่งหนึ่งบรรทัดได้อย่างไร
11 shell  find  xargs  cd-command 

3
วิธีรันคำสั่งซ้ำ ๆ ด้วยอาร์กิวเมนต์ที่ต่างกัน?
ฉันใช้ Ubuntu ฉันคัดลอกบางอาร์กิวเมนต์ (คั่นด้วย newline) และฉันสามารถใช้xselเพื่อพิมพ์ออกมาเช่นนี้ $ xsel arg1 arg2 arg3 arg4 ... ตอนนี้ฉันต้องการใช้แต่ละอาร์กิวเมนต์เหล่านี้สำหรับคำสั่งอื่นและดำเนินการคำสั่งนั้นหลายครั้งตามที่มีข้อโต้แย้ง ดังนั้นฉันจึงพยายาม $ xsel | mycommand "constantArgument" $1 อย่างไรก็ตามสิ่งนี้ดำเนินการmycommandสำหรับอาร์กิวเมนต์แรกเท่านั้น ฉันจะรันมันสำหรับทุก ๆ การโต้แย้งได้อย่างไร?

2
จัดรูปแบบไฟล์ XML จำนวนมาก
ฉันจัดการไฟล์ XML จำนวนมากที่กระจัดกระจายไปทั่วโครงสร้างไดเรกทอรีที่ซ้อนกัน ฉันพยายามต่อไปนี้: $ find . -name "*.xml" -type f | xargs -- xmllint --format ปัญหาคือการสร้างผลลัพธ์ XML ที่จัดรูปแบบแล้วบนหน้าจอ แต่จะไม่เปลี่ยนไฟล์ ฉันจะเปลี่ยนคำสั่งนี้เพื่อให้เนื้อหาไฟล์จริงมีการเปลี่ยนแปลงได้อย่างไร?
11 find  xargs  xml 

5
ค้นหา | xargs shasum สร้างการตรวจสอบของไฟล์ checksum เอง (ก่อนกำหนด) และล้มเหลวเมื่อตรวจสอบ
ปัญหาของฉัน (ในสคริปต์ด้วย#!/bin/sh) มีดังนี้: ฉันพยายามตรวจสอบไฟล์ทั้งหมดในไดเรกทอรีเพื่อการเก็บถาวร ไฟล์ checksum (ในกรณีของฉัน sha1) ที่มีชื่อไฟล์ทั้งหมดควรอยู่ในไดเรกทอรีเดียวกัน ช่วยบอกว่าเรามีไดเรกทอรี~/testพร้อมไฟล์f1และf2: mkdir ~/test cd ~/test echo "hello" > f1 echo "world" > f2 ตอนนี้กำลังคำนวณ checksums ด้วย find -maxdepth 1 -type f -printf '%P\n' | xargs shasum ทำตามที่ฉันต้องการทุกอย่างแสดงรายการไฟล์ทั้งหมดของไดเรกทอรีปัจจุบันเท่านั้นและคำนวณผลรวม sha1 (maxdepth อาจเปลี่ยนแปลงได้ในภายหลัง) เอาต์พุตบน STDOUT คือ: f572d396fae9206628714fb2ce00f72e94f2258f f1 9591818c07e900db7e1e0bc4b884c945e6a61b24 f2 น่าเสียดายที่เมื่อพยายามบันทึกไฟล์ลงในไฟล์ด้วย find -maxdepth 1 …
10 find  xargs  checksum  hashsum 

6
การลบไฟล์ด้วยช่องว่างในชื่อของพวกเขา
ฉันพยายามลบไฟล์ทั้งหมดที่มีช่องว่างในชื่อของพวกเขา ฉันใช้คำสั่งดังต่อไปนี้ แต่มันทำให้ฉันมีข้อผิดพลาด คำสั่ง: ls | egrep '. ' | xargs rm ที่นี่ถ้าฉันใช้ls | egrep '. 'คำสั่งเพียงอย่างเดียวมันให้ชื่อไฟล์ทั้งหมดพร้อมช่องว่างในชื่อไฟล์ แต่เมื่อฉันพยายามที่จะส่งออกไปยัง rm ช่องว่างทั้งหมด (นำหน้าหรือต่อท้าย) จะถูกลบ ดังนั้นคำสั่งของฉันไม่ได้รับการดำเนินการอย่างถูกต้อง ตัวชี้ใด ๆ เกี่ยวกับวิธีลบไฟล์ที่มี atleast หนึ่งช่องว่างในชื่อของพวกเขา?
10 shell  quoting  rm  xargs 

4
จัดรูปแบบเอาต์พุตของ xargs
ฉันต้องการเปลี่ยนรูปแบบของเอาต์พุต xargs ที่แสดง cat k.txt 1 2 3 และ cat k.txt | xargs 1 2 3 แต่ผมอยากจะมีหรือ1, 2, 3 1|2|3ข้อเสนอแนะใด ๆ
10 xargs 

3
วิธีการเปิดหลายไฟล์จาก `find` output?
ฉันรู้ว่าฉันสามารถเปิดหลายไฟล์ที่พบใน dir ดังนี้: find -name *.foo -xargs <command> {} \; วิธีนี้ใช้งานได้ แต่เมื่อพยายามเปิด textfiles แบบกลุ่มใน gedit ในเวลาเดียวกันมันจะเปิดขึ้นมาอย่างต่อเนื่อง (เมื่อปิดไฟล์หนึ่งไฟล์จะเปิดขึ้นอีกอันหนึ่ง) ฉันต้องการเปิดไฟล์ทั้งหมดในเวลาเดียวกัน ฉันจะบรรลุสิ่งนี้ได้อย่างไร
10 bash  find  xargs 

2
ระบุพารามิเตอร์สำหรับ scp ด้วย xargs
เมื่อฉันวิ่งsvn st | awk '{print $2}'ฉันจะได้รับ: a.py b.py c.py จากนั้นฉันต้องการscpไฟล์เหล่านี้ไปยังเซิร์ฟเวอร์ระยะไกล ฉันเหนื่อย: svn st | awk '{print $2}' | xargs scp my_name@my_server:~/ แต่มันไม่ทำงาน คำสั่งที่เหมาะสมในการทำเช่นนี้คืออะไร? ขอบคุณ!
10 scp  xargs 

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