จาก man xargs
xargs อ่านรายการจากอินพุตมาตรฐานคั่นด้วยช่องว่าง (ซึ่งสามารถป้องกันด้วยเครื่องหมายอัญประกาศคู่หรือเดี่ยวหรือแบ็กสแลช) หรือขึ้นบรรทัดใหม่และดำเนินการคำสั่ง (ค่าเริ่มต้นคือ / bin / echo) อย่างน้อยหนึ่งครั้ง โดยรายการที่อ่านจากอินพุตมาตรฐาน บรรทัดว่างในอินพุตมาตรฐานจะถูกละเว้น
เราสามารถ (ส่วนใหญ่) แก้ไขคำสั่งเริ่มต้นของคุณโดยเปลี่ยน xargs delimiter เป็น newline:
ls | egrep '. ' | xargs -d '\n' rm
(อย่าทำอย่างนี้ ... อ่านต่อ)
แต่ถ้าชื่อไฟล์มีการขึ้นบรรทัดใหม่
touch "filename with blanks
and newline"
เนื่องจากชื่อไฟล์ Unix สามารถมีช่องว่างและขึ้นบรรทัดใหม่พฤติกรรมเริ่มต้นนี้มักเป็นปัญหา ชื่อไฟล์ที่มีช่องว่างและ / หรือบรรทัดใหม่ถูกประมวลผลอย่างไม่ถูกต้องโดย xargs ในสถานการณ์เหล่านี้ควรใช้ตัวเลือก -0ซึ่งป้องกันปัญหาดังกล่าว
ls
เป็นเครื่องมือสำหรับการบริโภคโดยตรงโดยมนุษย์แทนที่จะต้องใช้find
คำสั่งที่สามารถแยกชื่อไฟล์ด้วยอักขระ null ( -print0
) เราต้องบอก grep เพื่อใช้อักขระ null เพื่อแยกอินพุต ( -z
) และเอาต์พุต ( -Z
) สุดท้ายเราบอกให้ xargs ใช้ตัวอักษร null ( -0
)
find . -type f -print0 | egrep '. ' -z -Z | xargs -0 rm
echo
ครั้งแรกอย่างแน่นอนเพื่อป้องกันการพิมพ์ผิด เพิ่มecho
ที่ด้านหน้าและจะพิมพ์ไฟล์ทั้งหมดที่จะลบออก