2014-05-01 82 views
-3

IM使用rsync通過bash腳本做日常備份的。保留備份

增量備份正在進入一個過時的文件夾,在此基礎上行腳本的

rsync -avz --link-dest=$LinkDest [email protected]:/data/backup/"$j" /home/backup/website/$f_date --bwlimit=10000 --log-file=/logs/rsync_"$j"_"$r_date".log 

,所以我將結束與文件夾如下

2014-05-01 2014年5月2日 2014年5月3日

我想要做的就是讓一個腳本,一旦他們有30天,將刪除這些文件夾。

,所以我不帶 2014-05-01 2014-06-01

從而使我30天保留告終。

[更新] 繼承人另一種方法的想法,

,如果我改變備份腳本備份放置到一個名爲「月(日期+%B)」 /文件夾「日子(日期+%F)」

rsync -avz --link-dest=$LinkDest [email protected]:/data/backup/"$j" /home/backup/website/$m_date/$f_date --bwlimit=10000 --log-file=/usr/local/src/backup/logs/rsync_"$j"_"$r_date".log 

我可以有另一個腳本來檢查月份是什麼,並刪除其他文件夾名稱?但我現在堅持以如何看待文件夾的內容,並刪除所有文件夾,但不是一個匹配m_date = $(日期+%B)

#!/bin/bash 

LinkDest=/home/backup/website/ 
m_date=$(date +%B) 

find $LinkDest . -maxdepth 1 -not -name "$m_date" -type f -exec rm {} \; 

回答

0

繼承人我解決這個

增量備份腳本

#!/bin/bash 


r_date=$(date "+%d-%m-%y") 
f_date=$(date +%F) 
servers=("123.111.178.38" "192.237.38.167" "118.137.95.142) 

for j in "${servers[@]}" 
do 

echo "server:/data/backup/$j /home/backup/website/$j" 

rsync -avz [email protected]:/data/backup/"$j" /home/backup/website/full --bwlimit=10000  --log-file=/usr/local/src/backup/logs/rsync_"$j"_"$r_date".log 

done 

它創建了一個名爲「月」網站內的一個文件夾,以便四月五月六月等,每月日的每天裏備份。

然後在每月的28日。 crontab運行的保留腳本如下

#!/bin/bash 

LinkDest=/home/backup/website/ 
m_date=$(date +%B) 

echo "Deleteing Old Backups Started" 

find $LinkDest/ -xdev -depth -mindepth 1 -not -path "*$m_date*" -not -path "*full*" -exec rm -Rf {} \; 

echo "Deleting Old Backups Completed" 
0

你可以使用find-mtime標誌來找到這些文件。例如:

find . -mtime 30 -exec rm {} \; 
+0

哎呀。考慮使用'-exec'標誌'find'甚至'找... -print0 | xargs -0'。正如所寫,這可能會導致相當危險的輸出。 – kojiro

+0

或者使用'-delete'行動(應該可以在Linux上)。名爲'-rf'和'*'的文件是有問題的,否則。 – Mat

+0

@kojiro ARG,確實如此。 '-exec'更優雅。 – Mureinik

相關問題