Score:2

ลบไฟล์ที่ไม่ตรงกับรูปแบบโดยใช้ xargs

ธง dk

คำสั่งต่อไปนี้มาจาก https://www.tecmint.com/xargs-command-examples/ ตัวอย่าง #9 เป็นการลบไฟล์ที่ไม่ตรงกับ *gz ออกจากไดเรกทอรีปัจจุบัน

$ หา. -พิมพ์ f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

มีจุดประสงค์อะไร -พิมพ์0 หาเรื่อง หา คำสั่งและ -0 และ -ฉัน {} หาเรื่อง xargs สั่งการ? ทำไมพวกเขาถึงต้องการ? ขอบคุณ!

Score:4
ธง hr

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

แล้วต้องบอกต่อ xargs เพื่อคาดหวังข้อมูลที่คั่นด้วยค่า null ลงมาที่ท่อ - นั่นคือสิ่งที่ -0 สำหรับ. ดังนั้นจึงจำเป็นที่นี่เมื่อใช้ -พิมพ์0 บน LHS

ในขณะเดียวกัน {} เป็นสตริงการแทนที่ - เมื่อคุณใช้ -ฉัน {}, แต่ละ {} ในคำสั่งต่อไปนี้จะถูกแทนที่ด้วยรายการอินพุต จำเป็นจริงๆ เฉพาะเมื่อคุณต้องการควบคุมตำแหน่งที่รายการปรากฏในบรรทัดคำสั่งต่อไปนี้ (และมีผลข้างเคียงจากการเรียกใช้การเรียกเพียงครั้งเดียวสำหรับแต่ละรายการ เทียบเท่ากับการเพิ่ม -L 1). IMHO ไม่จำเป็นที่นี่ และทำให้โซลูชันไม่มีประสิทธิภาพเนื่องจากทำงาน rm หนึ่งครั้งสำหรับแต่ละไฟล์ที่พบ แทนที่จะเป็นแบทช์

โปรดทราบว่า หา มี -ผู้บริหาร ตัวเลือกและก -ลบ ตัวเลือกที่ทั้งสองหลีกเลี่ยงปัญหาการเขียน / อ่านข้อมูลที่คั่นด้วย:

หา . -type f -not -name '*gz' -exec rm -v {} +

หรือ

หา . -type f -not -name '*gz' -print -delete

(ที่ -พิมพ์ ที่นี่เพื่อให้การทำงานที่คล้ายกันเป็น -v ตัวเลือกที่จะ rm).

Raffa avatar
jp flag
+1 ... `xargs -0` ก็เป็น `xargs --null` เช่นกัน
hr flag
@Raffa จริงและ find's `-not` ก็เช่นกัน (พกพาสะดวกกว่า) `!` - ฉันมักจะลังเลที่จะรับคำตอบมากเกินไปด้วย TMI แม้ว่า ...

โพสต์คำตอบ

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