通过lftp / ftp删除旧备份文件夹

时间:2011-10-25 01:30:36

标签: bash ftp backup

我正在为我的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服务器上的其他文件夹?

2 个答案:

答案 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 ;.这并不能让您删除当天的文件,但如果您乐意保留可变数量的备份,则比其他脚本解决方案更容易。

您可能需要稍微调整一下这些文件名。