我正在为我的Ubuntu服务器编写一个小的备份脚本。这些文件是tar'ed并在本地压缩到一个临时文件夹,通过lftp上传到ftp服务器,最后在本地删除。
将文件保存到服务器:
FTPSUBDIR=`date --utc +"%Y-%m-%d"`
echo "mkdir -p /daily/${FTPSUBDIR}; mirror --reverse ${TEMPDIR} /daily/${FTPSUBDIR};" | /usr/bin/lftp -u "$FTPUSER,$FTPPASS" "$FTPSERV"
ftp服务器上的文件夹结构:
/
daily
2011-10-25
2011-10-24
2011-10-23
weekly
2011-10-23
2011-10-16
2011-10-09
如何仅保留x个最新备份(每天5个,每周4个)并删除ftp服务器上的其他文件夹?
答案 0 :(得分:2)
只需在远程系统上执行ftp操作,您就需要在ftp客户端更加主动。
非调试的代码片段跟随......你必须充实并调试。
# print results of directory list to standard out ftp_dir () { typeset dir="$1"; ftp <<'FTP' login connection and cd directory commands FTP } # read delete commands (or others) from stdin using inline login ftp_delete() { cat <<FTP - | ftp send FTP login and delete commands FTP } do_delete () { typeset dir="$1"; typeset cnt="$2"; if [ ${#names} -gt $cnt ]; then typeset a_end=$(( ${#names} - 8 )); ( typeset n=0; while [ $n -lt a_end ]; do echo "delete $dir/${names[$n]}"; n=$(( $n + 1 )); done; ) | ftp_delete fi } names=( $( ftp_dir weekly | sort ) ); #get all entries do_delete dir 4
如果我更清醒,我可能会得到一个更好的答案。
答案 1 :(得分:1)
这是我发现删除旧备份的最简单方法:
HOST='ftpback.net'
USER='username'
PASSWD='pass'
FILE="file.tar.gz"
DELPREFIX=$( date -d 'now -2 month' +'%y-%m' )
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd mysql
put $FILE
mdel "$DELPREFIX*"
y
quit
END_SCRIPT
exit 0
在这种情况下, DELPREFIX 等于前一个月,所以如果是11月,则日期将是9月,例如&#39; 15-09&#39;
在FTP中,它会删除以 DELPREFIX 开头的所有文件,例如&#39; 15-09&#39 ;.这并不能让您删除当天的文件,但如果您乐意保留可变数量的备份,则比其他脚本解决方案更容易。
您可能需要稍微调整一下这些文件名。