บทความนี้จะแสดงวิธีลบไฟล์ที่เก่ากว่าจำนวนวันที่กำหนด (หรือชั่วโมง/นาที) ด้วยตนเองหรืออัตโนมัติผ่าน Bash script พร้อมตัวอย่าง
การลบไฟล์เก่ากว่าจำนวนวันหนึ่ง (หรือนาที หรือชั่วโมง) ใช้สองคำสั่ง Linux – rm และ find
ลบไฟล์ด้วย rm
ก่อนอื่น คำสั่ง rm ใช้ remove ไฟล์และไดเรกทอรีใน Linux นี่คือบทความเต็มเกี่ยวกับการใช้งาน:
rm Command in Linux [With Examples]
ส่งรายการไฟล์ที่กรองแล้วให้ rm
ส่วนประกอบถัดไป คำสั่ง find ใช้หาไฟล์ตามเกณฑ์ – ในกรณีนี้คืออายุไฟล์ (เวลาที่ผ่านมาตั้งแต่แก้ไขล่าสุด) นี่คือบทความของเราเกี่ยวกับ find:
Find Command in Linux [With Useful Examples]
รวมเข้าด้วยกัน – ตัวอย่าง
ใช้ find และ rm ร่วมกัน:
find /path/to/files/* -mtime +7 -exec rm {} \;
เกิดอะไรขึ้นที่นี่?
- find เรียกบน directory /path/to/files
- ตัวเลือก -mtime ส่งให้ find พร้อมค่า +7 – หมายถึงไฟล์ที่แก้ไขมากกว่า 7 วันที่แล้ว
- ตัวเลือก exec ส่งให้ find พร้อมคำสั่งที่จะรันกับแต่ละไฟล์ที่ตรง
- rm ถูกเรียกโดย -exec ใน find
- มันจะลบไฟล์ทั้งหมดที่ตรงเงื่อนไขที่ให้ find
- Curly braces, slash, และ semicolon ท้ายบรรทัด ส่งสัญญาณจบคำสั่งที่ find ควรรันบนแต่ละไฟล์ที่ตรง
ชั่วโมง, นาที แทนวัน
เพื่อใช้นาทีแทนวันเป็นหน่วยเวลา ให้แทน -mmin แทน -mtime
find /path/to/files/* -mmin +30 -exec rm {} \;
ตัวอย่างข้างต้นจะลบไฟล์เก่ากว่า 30 นาที
ทำเป็น Script
แทนที่จะพิมพ์ทุกครั้ง สามารถทำเป็น script
#!/bin/bash find /path/to/files/* -mtime +7 -exec rm {} \;
Save snippet ข้างต้นลงไฟล์ (ชื่อ deletescript.sh เช่น) แล้วเรียกได้โดยรัน:
./deletescript.sh
คุณยังสามารถสร้าง alias สำหรับคำสั่งนี้หากต้องการรันจากที่ไหนก็ได้
排定การลบไฟล์เก่าอัตโนมัติ
หากต้องการรันคำสั่งอัตโนมัติทุกช่วงเวลา ให้เพิ่มใน crontab ไฟล์ crontab คือที่เก็บ scheduled tasks ของ user ใน Linux แก้ไขได้โดยรัน:
crontab -e
รันคำสั่งข้างต้น crontab editor จะแสดง เพิ่มต่อไปนี้ท้ายไฟล์เพื่อรัน script ทุกวัน:
@daily find /path/to/files/* -mtime +7 -exec rm {} \;