ตัวอย่างการใช้คำสั่ง "xargs"

คำอธิบายและบทนำ

คำสั่ง xargs มักใช้ในบรรทัดคำสั่งที่ส่งออกคำสั่งหนึ่งไปเป็นอาร์กิวเมนต์อินพุตสำหรับคำสั่งอื่น

ในหลายกรณีไม่มีคำสั่งพิเศษเช่น xargs เป็นสิ่งจำเป็นเพื่อให้บรรลุผลดังกล่าวเนื่องจากตัวดำเนินการ "pipe" และ "redirection" ทำธุรกรรมประเภทเดียวกัน อย่างไรก็ตามบางครั้งมีปัญหาเกี่ยวกับกลไกการวางสายและการเปลี่ยนเส้นทางพื้นฐานเช่นถ้าอาร์กิวเมนต์มีช่องว่าง xargs จะเอาชนะ

นอกจากนี้ xargs จะดำเนินการคำสั่งที่ระบุซ้ำ ๆ หากจำเป็นเพื่อประมวลผลอาร์กิวเมนต์ทั้งหมดที่กำหนดให้ ในความเป็นจริงคุณสามารถระบุจำนวนอาร์กิวเมนต์ที่ควรอ่านออกจากกระแสข้อมูลอินพุตมาตรฐานทุกครั้งที่ xargs รันคำสั่งที่ระบุ

โดยทั่วไปคำสั่ง xargs ควรใช้ถ้าเอาต์พุตของคำสั่งหนึ่งคำนั้นถูกใช้เป็นส่วนหนึ่งของตัวเลือกหรืออาร์กิวเมนต์ของคำสั่งที่สองซึ่งมีการสตรีมข้อมูล (โดยใช้ตัวดำเนินการท่อ "|") ท่อปกติจะเพียงพอถ้าข้อมูลมีวัตถุประสงค์เพื่อเป็นอินพุท (มาตรฐาน) ของคำสั่งที่สอง

ตัวอย่างเช่นถ้าคุณใช้ คำ สั่ง ls เพื่อสร้างรายการชื่อไฟล์และไดเร็กทอรีแล้ววางรายการนี้ลงในคำสั่ง xargs ที่ดำเนินการ echo คุณสามารถระบุจำนวนชื่อไฟล์หรือชื่อไดเร็กทอรีที่ประมวลผลโดย echo ในการทำซ้ำแต่ละครั้งดังนี้ :

ls | xargs -n 5 echo

ในกรณีนี้ echo จะได้รับไฟล์หรือชื่อไดเรกทอรีห้าไฟล์พร้อมกัน เนื่องจาก echo จะเพิ่มอักขระบรรทัดใหม่ที่ท้ายแล้วจะมีการเขียนชื่อห้าชื่อในแต่ละบรรทัด

ถ้าคุณเรียกใช้คำสั่งที่ส่งคืนรายการตัวเลขจำนวนมากและไม่สามารถคาดการณ์ได้ (เช่นชื่อไฟล์) ที่ส่งต่อไปยังคำสั่งอื่นสำหรับการประมวลผลต่อไปความคิดที่ดีในการควบคุมจำนวนอาร์กิวเมนต์สูงสุดที่คำสั่งที่สองได้รับเพื่อหลีกเลี่ยงการโอเวอร์โหลดและการขัดข้อง

บรรทัดคำสั่งต่อไปนี้แบ่งพาร์ติชันสตรีมของชื่อไฟล์ที่ผลิตโดย ค้นหา int กลุ่ม 200 ก่อนที่จะส่งต่อไปยังคำสั่ง cp ซึ่งจะคัดลอกไปยังไดเร็กทอรี สำรอง

พบ ./ --type f-name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

องค์ประกอบ "./" ในคำสั่ง find ระบุไดเร็กทอรีปัจจุบันสำหรับการค้นหา อาร์กิวเมนต์ "-type f" จำกัด การค้นหาไฟล์และธง "-name" * .txt จะกรองสิ่งที่ไม่มีส่วนขยาย ".txt" อีกต่อหนึ่งธง -i ใน xargs จะส่งสัญญาณว่า { } สัญกรณ์แสดงชื่อไฟล์แต่ละชื่อของไอน้ำ

คำสั่งต่อไปนี้จะค้นหาไฟล์ชื่อ core ในหรือใต้ไดเร็กทอรี / tmp และลบออก

หา / tmp -name หลักประเภท f -print | xargs / bin / rm -f

โปรดทราบว่าการดำเนินการนี้จะทำงานไม่ถูกต้องหากมีชื่อไฟล์ที่มีบรรทัดใหม่บรรทัดคำพูดเดี่ยวหรือสองคำหรือเว้นวรรค รุ่นต่อไปนี้ประมวลผลชื่อไฟล์ในลักษณะที่ชื่อไฟล์หรือไดเรกทอรีที่มีเครื่องหมายคำพูดเดี่ยวหรือสองช่องว่างหรือบรรทัดใหม่จะได้รับการจัดการอย่างถูกต้อง

หา / tmp -name core-type f -print0 | xargs -0 / bin / rm -f

แทนตัวเลือก -i คุณสามารถใช้ค่าสถานะ -I ซึ่งระบุสตริงที่ถูกแทนที่โดยบรรทัดอินพุทในอาร์กิวเมนต์ของคำสั่งเช่นในตัวอย่างนี้:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

สตริงทดแทนหมายถึง "{}" ซึ่งหมายความว่าเหตุการณ์ใด ๆ ของ "{}" ในอาร์กิวเมนต์คำสั่งจะถูกแทนที่ด้วยอิลิเมนต์อินพุตที่ส่งต่อไปยัง args ผ่านการทำงานของท่อ ซึ่งจะช่วยให้คุณสามารถวางอิลิเมนต์อินพุตที่ตำแหน่งเฉพาะในอาร์กิวเมนต์ของคำสั่งที่จะถูกดำเนินการ (ซ้ำ ๆ )