Android

คำสั่ง Xargs ใน linux

Linux команда xargs.

Linux команда xargs.

สารบัญ:

Anonim

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

ด้วย xargs คุณสามารถระบุอินพุตมาตรฐานเป็นอาร์กิวเมนต์สำหรับยูทิลิตีบรรทัดคำสั่งเช่น mkdir และ rm

ในบทช่วยสอนนี้เราจะกล่าวถึงพื้นฐานของการใช้คำสั่ง xargs

วิธีการใช้คำสั่ง Linux xargs

xargs อ่านอาร์กิวเมนต์จากอินพุตมาตรฐานคั่นด้วยช่องว่างหรือบรรทัดใหม่และดำเนินการคำสั่งที่ระบุโดยใช้อินพุตเป็นอาร์กิวเมนต์ของคำสั่ง หากไม่ได้ระบุคำสั่งไว้ค่าเริ่มต้นคือ /bin/echo

ไวยากรณ์สำหรับคำสั่ง xargs มีดังนี้:

xargs]

ตัวอย่างพื้นฐานที่สุดของการใช้ xargs คือการส่งผ่านสตริงจำนวนมากคั่นด้วยช่องว่างโดยใช้ xargs ไปยัง xargs และเรียกใช้คำสั่งที่จะใช้สตริงเหล่านั้นเป็นอาร์กิวเมนต์

echo "file1 file2 file3" | xargs touch

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

touch file1 file2 file3

วิธีดูคำสั่งและแจ้งผู้ใช้

หากต้องการพิมพ์คำสั่งบนเทอร์มินัลก่อนดำเนินการให้ใช้ตัวเลือก -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

พิมพ์ y หรือ Y เพื่อยืนยันและรันคำสั่ง:

touch file1 file2 file3 ?…y

ตัวเลือกนี้มีประโยชน์เมื่อเรียกใช้งานคำสั่งทำลาย

วิธีการ จำกัด จำนวนอาร์กิวเมนต์

ตามค่าดีฟอลต์จำนวนอาร์กิวเมนต์ที่ส่งไปยังคำสั่งถูกกำหนดโดยขีด จำกัด ของระบบ

--max-args -n ( --max-args ) ระบุจำนวนของอาร์กิวเมนต์ที่จะถูกส่งผ่านไปยังคำสั่งที่กำหนด xargs รันคำสั่งที่ระบุหลายครั้งเท่าที่จำเป็นจนกว่าอาร์กิวเมนต์ทั้งหมดจะหมด

ในตัวอย่างต่อไปนี้จำนวนอาร์กิวเมนต์ที่อ่านจากอินพุตมาตรฐานถูก จำกัด ที่ 1

echo "file1 file2 file3" | xargs -n 1 -t touch

ดังที่คุณเห็นจากเอาต์พุต verbose ด้านล่างคำสั่ง touch จะถูกดำเนินการแยกกันสำหรับแต่ละอาร์กิวเมนต์:

touch file1 touch file2 touch file3

วิธีเรียกใช้หลายคำสั่ง

หากต้องการรันหลายคำสั่งด้วย xargs ให้ใช้ตัวเลือก -I มันทำงานได้โดยการกำหนด replace-str หลังจากตัวเลือก -I และเหตุการณ์ทั้งหมดของ replace-str จะถูกแทนที่ด้วยอาร์กิวเมนต์ที่ส่งผ่านไปยัง xargs

ตัวอย่าง xargs ต่อไปนี้จะเรียกใช้สองคำสั่งก่อนอื่นมันจะสร้างไฟล์โดยใช้การ touch แล้วมันจะแสดงรายการไฟล์ด้วย ls สั่ง ls :

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

ตัวเลือกทั่วไปสำหรับ replace-str คือ % อย่างไรก็ตามคุณสามารถใช้ตัวยึดตำแหน่งอื่นได้ตัวอย่างเช่น ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

วิธีระบุตัวคั่น

ใช้ตัวเลือก -d ( --delimiter ) เพื่อตั้งค่าตัวคั่นที่กำหนดเองซึ่งอาจเป็นอักขระเดียวหรือลำดับการ --delimiter เริ่มต้นด้วย \

ตัวอย่างต่อไปนี้ที่เราใช้ เป็นตัวคั่น:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

วิธีอ่านรายการจากไฟล์

คำสั่ง xargs ยังสามารถอ่านไอเท็มจากไฟล์แทนอินพุตมาตรฐาน หากต้องการทำเช่นนั้นให้ใช้ตัวเลือก -a ( --arg-file ) ตามด้วยชื่อไฟล์

ในตัวอย่างต่อไปนี้คำสั่ง xargs จะอ่านไฟล์ ips.txt และ ping ที่อยู่ IP แต่ละรายการ

ips.txt

8.8.8.8 1.1.1.1

นอกจากนี้เรายังใช้ตัวเลือก -L 1 ซึ่งสั่งให้ xargs อ่านหนึ่งบรรทัดในเวลานั้น หากไม่ใช้ตัวเลือกนี้ xargs จะส่ง IP ทั้งหมดให้กับคำสั่ง ping เดียว

xargs -t -L 1 -a ips.txt ping -c 1

ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms… ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

ใช้ xargs พร้อม find

xargs มักใช้ร่วมกับคำสั่ง find คุณสามารถใช้ find เพื่อค้นหาไฟล์ที่ต้องการแล้วใช้ xargs เพื่อดำเนินการกับไฟล์เหล่านั้น

เพื่อหลีกเลี่ยงปัญหาเกี่ยวกับชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่หรืออักขระพิเศษอื่น ๆ ให้ใช้ตัวเลือก find -print0 ซึ่งทำให้การ find พิมพ์ชื่อไฟล์เต็มตามด้วยอักขระ null เอาต์พุตนี้สามารถตีความได้อย่างถูกต้องโดย xargs โดยใช้ตัวเลือก -0 , ( --null )

ในตัวอย่างต่อไปนี้ find จะพิมพ์ชื่อเต็มของไฟล์ทั้งหมดภายในไดเร็กทอรี /var/www/.cache และ xargs จะส่งผ่านพา ธ ไฟล์ไปยังคำสั่ง rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

การใช้ xargs เพื่อตัดอักขระช่องว่าง

xargs ยังสามารถใช้เป็นเครื่องมือในการลบช่องว่างจากทั้งสองด้านของสตริงที่กำหนด เพียง xargs สตริงไปที่คำสั่ง xargs และมันจะทำการตัดแต่ง:

echo " Long line " | xargs

Long line

สิ่งนี้มีประโยชน์เมื่อเปรียบเทียบสตริงในเชลล์สคริปต์

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

ข้อสรุป

xargs เป็นโปรแกรมอรรถประโยชน์บรรทัดคำสั่งบน Linux ที่ช่วยให้คุณสามารถสร้างและดำเนินการคำสั่ง

สำหรับข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือก xargs แต่ละตัวให้อ่านหน้า man xargs

เทอร์มินัล xargs