ลบไฟล์ใน directory ด้วย find เขียนเมื่อ 2012.07.27 โดย

มีเครื่องที่จำเป็นต้อง backup ฐานข้อมูลเป็นรายชั่วโมง ทำให้เกิดไฟล์จำนวนมากในแต่ละวัน ไจะไม่กล่าวถึงการ backup แต่จะกล่าวถึงการลบไฟล์ backup ที่เก่าเกินความต้องการด้วยคำสั่ง find

find เป็นคำสั่งที่ใช้ในการค้นหา ซึ่งมีข้อดีคือได้ผลมาในรูปแบบ absolute path ทำให้เราสามารถใช้คำสั่งกระทำการต่างๆ ได้ง่าย

/bin/find /path/to/files/* -type f  | sort -rn | sed -e '1,5d' | xargs -d 'n' rm

find /path/to/files/* -type f หมายถึงค้นหาไฟล์ทั้งหมดใน directory นั้นๆ -type f เพื่อระบุว่าเราต้องการไฟล์เท่านั้น directory ต่างๆ จะไม่ถูกรวบรวมมาด้วย
sort -rn เป็นการสั่งให้เรียงตามชื่อไฟล์ โดยให้เรียงแบบ reverse มากไปหาน้อย
sed -e '1,5d' เป็นการสั่งให้ตัดส่วนบน 5 ลำดับแรกออก
xargs -d 'n' rm เป็นการสั่งให้ทำงานโดยตัดออก (-d) โดยให้ตัดทุกบรรทัด (n) แล้วเอาผลที่ได้แต่ละอันส่งเป็น argument ให้คำสั่ง rm อีกที

เมื่อเอาคำสั่งทั้งหมดมารวมกันจะได้
1. หาไฟล์ใน directory ที่ระบุ
2. เอาผลที่ได้เรียงจากมากไปหาน้อย
3. ตัดผลที่ได้ 5 ลำดับแรกออก
4. ลบไฟล์ตามรายชื่อที่เหลือ

สุดท้ายจะเหลือไฟล์ จำนวน 5 ไฟล์ล่าสุดใน directory นั้นๆ



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