ฉันจะลบไฟล์. swp ทั้งหมดในไดเรกทอรีย่อยทั้งหมดภายใต้ Linux ได้อย่างไร
ฉันจะลบไฟล์. swp ทั้งหมดในไดเรกทอรีย่อยทั้งหมดภายใต้ Linux ได้อย่างไร
คำตอบ:
ลบไฟล์ * .swp ทั้งหมดภายใต้ไดเรกทอรีปัจจุบันใช้find
คำสั่งในรูปแบบใดรูปแบบหนึ่งต่อไปนี้:
find . -name \*.swp -type f -delete
-delete
ตัวเลือกหมายความว่าหาโดยตรงจะลบไฟล์ที่ตรงกัน นี่คือการจับคู่ที่ดีที่สุดสำหรับคำถามที่แท้จริงของ OP
การใช้การ-type f
ค้นหาหมายความว่าจะประมวลผลไฟล์เท่านั้น
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
ตัวเลือก-exec
ช่วยให้ค้นหาเพื่อรันคำสั่งโดยพลการต่อไฟล์ ตัวแปรแรกจะรันคำสั่งหนึ่งครั้งต่อไฟล์และไฟล์ที่สองจะรันคำสั่งน้อยที่สุดเท่าที่จะเป็นไปได้โดยแทนที่{}
ด้วยพารามิเตอร์ให้มากที่สุด
find . -name \*.swp -type f -print0 | xargs -0 rm -f
ท่อส่งออกไปยังรูปแบบจะใช้คำสั่งต่อไฟล์ที่ซับซ้อนมากขึ้นกว่าที่เป็นไปได้ด้วยxargs
-exec
ตัวเลือก-print0
บอกfind
ให้แยกการจับคู่กับ ASCII NULL แทนที่จะขึ้นบรรทัดใหม่และ-0
บอกxargs
ให้คาดว่าอินพุตที่คั่นด้วย NULL สิ่งนี้ทำให้การสร้างท่อปลอดภัยสำหรับชื่อไฟล์ที่มีช่องว่าง
ดูman find
รายละเอียดและตัวอย่างเพิ่มเติม
find . -name '*.swp' -delete
เมื่อทำการค้นหาเสร็จแล้วลบตัวเองเพื่อลบความเสี่ยงสำหรับพื้นที่ที่ฝังอยู่ในชื่อไฟล์ ... เพื่อความปลอดภัยเพิ่มเติมให้พิจารณาเพิ่ม-type f
เฉพาะไฟล์เท่านั้น
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;
ทุบตี 4.0
shopt -s globstar
rm -f /path/**/*.swp
สำหรับการค้นหาภายใต้ไดเรกทอรีบ้านของฉัน (และใช้ GNU 'find' และ 'xargs') ฉันจะใช้:
find $HOME -name '*.swp' -print0 | xargs -0 rm -f
การใช้ ' -print0
' และ ' -0
' หมายความว่าชื่อจะถูกคั่นด้วยอักขระ ASCII NUL '\ 0' และสิ่งนี้จะจัดการกับเส้นทางของไฟล์ด้วยช่องว่าง ฯลฯ ในชื่อ หากคุณคิดว่าคุณอาจมีไดเรกทอรี (หรือไฟล์อุปกรณ์หรือ FIFO หรือไม่ใช่ไฟล์อื่น ๆ ) ภายใต้ไดเรกทอรีของคุณที่ลงท้ายด้วย '.swp' คุณสามารถเพิ่ม-type f
ตัวเลือก '' เพื่อ 'ค้นหา' หากคุณมีเฉพาะไดเรกทอรีคำสั่งด้านบนจะล้มเหลวในการลบออกอย่างดัง