ฉันคิดว่าสิ่งเหล่านี้เป็นวิธีการทั่วไปในการส่งผลลัพธ์ของคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่งเป็นอินพุต
ทั้งสามทำงานอย่างไร? หรือบางเว็บไซต์ / URL คืออะไร?
ฉันคิดว่าสิ่งเหล่านี้เป็นวิธีการทั่วไปในการส่งผลลัพธ์ของคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่งเป็นอินพุต
ทั้งสามทำงานอย่างไร? หรือบางเว็บไซต์ / URL คืออะไร?
คำตอบ:
สิ่งแรกที่จะพิมพ์:
man find
man xargs
find
คำสั่งพิมพ์ผลการออกมาตรฐานโดยค่าเริ่มต้นดังนั้น-print
ตัวเลือกที่เป็นปกติไม่จำเป็น แต่-print0
แยกชื่อไฟล์ที่มี 0 (NULL) ไบต์ดังนั้นชื่อที่มีช่องว่างหรือบรรทัดใหม่สามารถตีความได้อย่างถูกต้อง
-exec
ตัวเลือกเป็นสิ่งที่คุณสามารถใช้แทน xargs - ค้นหาคำสั่งรันคำสั่งสำหรับแต่ละรายการที่พบ
xargs
คำสั่งอ่านสตริงเนื้อที่หรือขึ้นบรรทัดใหม่แยกออกจากกัน (โดยทั่วไปจากการค้นหาคำสั่ง แต่พวกเขาอาจจะมาจากที่ใดก็ได้) และรันคำสั่งบางอย่างสำหรับแต่ละสาย
หาก xargs ทำงานด้วยตัวเลือก-0มันจะคาดหวังว่าสตริงที่คั่นด้วย NULL เป็นเอาต์พุตโดยfind ... -print0
ข้อได้เปรียบของ xargs คือมันสามารถจัดกลุ่มสตริงเข้าด้วยกันเพื่อที่จะดำเนินการคำสั่งเพียงครั้งเดียวหรือสองครั้งแทนที่จะเป็นnครั้ง
ดังนั้นในการใช้งานปกติ:
find start_directory -name '*.txt' | xargs ls -l
findจะแสดงรายการชื่อไฟล์และxargsจะออกคำสั่งเช่น:
ls -l file1.txt file2.txt file3.txt ... fileN.txt
ซึ่งเร็วกว่าการออกคำสั่ง find ของคุณ:
ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
โปรดทราบว่าไม่จำเป็นต้องใช้ xargs อีกต่อไปด้วยการนำการค้นหาปัจจุบันไปใช้ซึ่งอาจสนับสนุนไวยากรณ์ POSIX นี้ทั้งหมด:
find directory -name '*.txt' -exec ls -l {} +
ซึ่งง่ายกว่าและเร็วกว่าตัวแปร xargs เล็กน้อย
find directory -name '*.txt' | xargs ls -l
ดูบทความต่อไปนี้:
Linux และ Unix ค้นหาคำสั่งการสอนพร้อมตัวอย่าง
xargs: วิธีควบคุมและใช้อาร์กิวเมนต์บรรทัดคำสั่ง