Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีใช้คำสั่ง xargs ใน Linux

วิธีใช้คำสั่ง xargs ใน Linux

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

xargs คืออะไร?

ในรูปแบบพื้นฐาน xargs อ่านข้อมูลจากอินพุตมาตรฐาน (หรือ STDIN) และดำเนินการคำสั่งอย่างน้อยหนึ่งครั้งด้วยรายการที่อ่าน มีการสาธิตง่ายๆ มากมาย แต่นี่คือตัวอย่างที่ฉันหมายถึง

หากต้องการมี xargs รัน ls คำสั่งในโฟลเดอร์ Documents ของฉัน ฉันจะเรียกใช้คำสั่งต่อไปนี้:

echo "Documents" | xargs ls
วิธีใช้คำสั่ง xargs ใน Linux

อักขระไปป์ | กำลังวางท่ออะไรก็ตามที่มาก่อนนั้นเป็น STDIN สำหรับ xargs .

จะเห็นว่า xargs อ่านโฟลเดอร์เอกสารของฉันโดยไม่มีปัญหา นี่เป็นเพียงตัวอย่างหนึ่งของความสามารถของ xargs คำสั่ง

ในขณะที่ xargs คำสั่งสามารถใช้ในการดำเนินการบรรทัดคำสั่งต่างๆ มันมีประโยชน์มากเมื่อใช้กับ find สั่งการ. ในบทความนี้ เราจะพูดถึงตัวอย่างที่เป็นประโยชน์เพื่อทำความเข้าใจว่า xargs และ find ใช้ร่วมกันได้

การดำเนินการที่เกี่ยวข้องกับหลายไฟล์

สมมติว่าคุณต้องการคัดลอกเนื้อหาของ “ref.txt” ไปยังไฟล์ข้อความทั้งหมดที่อยู่ในไดเร็กทอรี แม้ว่างานอาจต้องการให้คุณรันคำสั่งหลายคำสั่ง xargs คำสั่งพร้อมกับ find คำสั่งทำให้ง่าย ฉันมีไดเร็กทอรีทดสอบสองสามอัน ไฟล์หนึ่งมี “test0.txt” ซึ่งมีข้อความ และไดเร็กทอรีอื่นมีไฟล์ทดสอบอีก 10 ไฟล์ที่ไม่มีข้อความอยู่ในนั้น ถ้าฉันต้องการนำเนื้อหาของ test0.txt และคัดลอกไปยังไฟล์ข้อความที่เหลือในไดเร็กทอรีอื่น ฉันจะเรียกใช้คำสั่งต่อไปนี้:

find ./test-dir1/ -name "*.txt" | xargs -n1 cp test0.txt
วิธีใช้คำสั่ง xargs ใน Linux

เพื่อให้เข้าใจคำสั่งที่แสดงด้านบน ให้แบ่งออกเป็นสองส่วน

ส่วนแรกคือ find ./test-dir1/ -name "*.txt" ซึ่งค้นหาไฟล์ .txt ทั้งหมดที่มีอยู่ในไดเร็กทอรี “test-dir1” คุณสามารถระบุไดเร็กทอรีใดก็ได้ที่นี่

ส่วนที่สอง xargs -n1 cp test.txt จะดึงเอาท์พุตของคำสั่งแรก (ชื่อไฟล์ผลลัพธ์) แล้วส่งต่อให้ cp (คัดลอก) คำสั่งทีละรายการ โปรดทราบว่า -n ตัวเลือกมีความสำคัญที่นี่ เนื่องจากเป็นคำสั่ง xargs เพื่อใช้หนึ่งอาร์กิวเมนต์ต่อการดำเนินการ

เมื่อรวมกันแล้ว คำสั่งแบบเต็มจะคัดลอกเนื้อหาของ “test0.txt” ไปยังไฟล์ .txt ทั้งหมดในไดเร็กทอรี

วิธีใช้คำสั่ง xargs ใน Linux

การดำเนินการที่เกี่ยวข้องกับอาร์กิวเมนต์จำนวนมาก

ข้อดีอย่างหนึ่งที่สำคัญของการใช้ xargs คือความสามารถในการจัดการกับอาร์กิวเมนต์จำนวนมาก ตัวอย่างเช่น ในขณะที่ลบไฟล์จำนวนมากในครั้งเดียว rm คำสั่งบางครั้งจะล้มเหลวด้วย “รายการอาร์กิวเมนต์ยาวเกินไป " ข้อผิดพลาด. นั่นเป็นเพราะมันไม่สามารถจัดการกับข้อโต้แย้งที่ยาวเหยียดได้ กรณีนี้มักเกิดขึ้นเมื่อคุณมีไฟล์มากเกินไปในโฟลเดอร์ที่คุณต้องการลบ

สมมติว่าคุณมี PDF 75 ไฟล์ และคุณได้รับข้อผิดพลาดขณะพยายามลบ

วิธีใช้คำสั่ง xargs ใน Linux

ซึ่งสามารถแก้ไขได้ง่ายด้วย xargs . หากต้องการลบไฟล์เหล่านี้ทั้งหมด ให้ใช้คำสั่งต่อไปนี้:

find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -f
วิธีใช้คำสั่ง xargs ใน Linux

การดำเนินการที่เกี่ยวข้องกับการค้นหารูปแบบ

นักพัฒนาซอฟต์แวร์และผู้ดูแลระบบทำการค้นหารูปแบบมากมายในขณะที่ทำงานบนบรรทัดคำสั่ง ตัวอย่างเช่น นักพัฒนาอาจต้องการดูไฟล์โปรเจ็กต์ที่แก้ไขตัวแปรหนึ่งๆ อย่างรวดเร็ว หรือผู้ดูแลระบบอาจต้องการดูไฟล์ที่ใช้พารามิเตอร์การกำหนดค่าระบบเฉพาะ ในสถานการณ์เหล่านี้ xargs พร้อมกับ find และ grep ทำให้ทุกอย่างเป็นเรื่องง่ายสำหรับคุณ

ตัวอย่างเช่น หากต้องการค้นหาไฟล์ ".txt" ทั้งหมดที่มีสตริง "maketecheasier" ให้เรียกใช้คำสั่งต่อไปนี้:

find ./ -name "*.txt" | xargs grep "maketecheasier"

นี่คือผลลัพธ์ของคำสั่งที่สร้างบนระบบของฉัน

วิธีใช้คำสั่ง xargs ใน Linux

การดำเนินการตัด/คัดลอก

Xargs พร้อมกับ find คำสั่ง สามารถใช้เพื่อคัดลอกหรือย้ายชุดของไฟล์จากไดเร็กทอรีหนึ่งไปยังอีกไดเร็กทอรีหนึ่ง ตัวอย่างเช่น ในการย้ายไฟล์ข้อความทั้งหมดที่เก่ากว่า 10 นาทีจากไดเร็กทอรีปัจจุบันไปยังไดเร็กทอรีก่อนหน้า ให้ใช้คำสั่งต่อไปนี้:

find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../

-I ตัวเลือกบรรทัดคำสั่งถูกใช้โดย xargs คำสั่งเพื่อกำหนดแทนที่สตริงซึ่งจะถูกแทนที่ด้วยชื่อที่อ่านจากผลลัพธ์ของ find สั่งการ. สตริงแทนที่คือ {} แต่มันจะเป็นอะไรก็ได้ ตัวอย่างเช่น คุณสามารถใช้ “file” เป็นสตริงแทนที่ได้

find . -name "*.txt" -mmin 10 | xargs -n1 -I 'file' mv 'file' ./practice

วิธีบอก xargs ว่าควรเลิกเมื่อใด

สมมติว่าคุณต้องการแสดงรายการรายละเอียดของไฟล์ .txt ทั้งหมดที่มีอยู่ในไดเร็กทอรีปัจจุบัน ตามที่อธิบายไว้แล้ว สามารถทำได้ง่ายๆ โดยใช้คำสั่งต่อไปนี้:

find . -name "*.txt" | xargs ls -l

แต่มีปัญหาอย่างหนึ่งคือ xargs คำสั่งจะดำเนินการ ls คำสั่งแม้ว่า find คำสั่งไม่พบไฟล์ .txt ใดๆ ต่อไปนี้เป็นตัวอย่าง

วิธีใช้คำสั่ง xargs ใน Linux

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

find . -name "*.txt" | xargs -r ls -l

บทสรุป

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

หากคุณสนุกกับการเขียนเกี่ยวกับวิธีใช้ xargs คำสั่งใน Linux อย่าลืมตรวจสอบเนื้อหา Linux อื่นๆ ของเรา เช่น คำแนะนำในการแก้ไขข้อผิดพลาด “ไม่มีพื้นที่เหลือบนอุปกรณ์” หรือเร่งความเร็วของ Ubuntu