Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

ลบไฟล์เก่าใน Bash: ลบตามวัน ชั่วโมง หรือนาที (ตัวอย่าง)

บทความนี้จะแสดงวิธีลบไฟล์ที่เก่ากว่าจำนวนวันที่กำหนด (หรือชั่วโมง/นาที) ด้วยตนเองหรืออัตโนมัติผ่าน 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 {} \;