公司有寫了shell定時在每晚12點在DB本機產生備份檔
但是之前並未寫到刪除功能
希望能做到產生備份檔同時刪除一個禮拜前備份的檔案,不讓本機空間不足影響DB服務
這要怎麽寫比較好?
do
if [ ! -d "/backup/db/$db" ]; then
mkdir -p /backup/db/$db
fi
if [ ! -d "/backup/db/$db/$year/$month" ];then
mkdir -p /backup/db/$db/$year/$month
fi
done
mysqldump -u $userid -p"$passwd" $db | gzip > $path/$db/$year/$month/$db-$datetime.sql.gz
用 find -ctime
find "$apth/" -type d -ctime +4 -print0 | xargs -0 rm -rf --
不過這裡的 ctime 是craete time, 跟我們認知的會有一點點不一樣。
例如 我現在 執行的是時間是 早上3.00, 那他搜尋的會是 4天前的3點之前的檔案
不是我們所認知的 00:00 - 24:00
你可以試試看,如果怕刪錯,就把保留檔案增加一些。
另外這一種 就比較複雜,直接取出00:00 的timestamp, 用timestamp 去比較
裡面用的是我的路徑,你可以試你需要修改
#!/bin/bash
tsbf7=$(date -d "7days ago" +"%s")
find /mnt/backup/local -type d -print0 |sort -k 1| while IFS= read -r -d $'\0' line; do
date2=$(echo "$line" |grep -Eo '[0-9]{4}-[0-9]{2}-[0-9]{2}')
ts2=$(date -d "$date2" "+%s")
if (( "$ts2" < "$tsbf7" )); then
## echo "small: $date2"
find /mnt/backup/local -name "$date2*" -type d -exec rm -rf {} \;
fi
done
https://www.webteach.tw/?p=784
分享我的寫法,主要是刪除十五天前的資料;跟你的需求一樣我也是備份資料庫時使用,但怕硬碟空間會爆掉所以也是會刪除舊的資料
資料庫備份指令參考:https://www.webteach.tw/?p=581