Bash脚本将文件备份到远程FTP。删除旧文件

时间:2012-10-19 13:42:48

标签: bash ftp backup remote-server

我正在编写一个bash脚本来将备份发送到远程ftp服务器。备份文件是使用WordPress插件生成的,因此从一开始就为我完成了一半的工作。

该脚本可以做几件事。

  1. 它在本地备份目录中查找任何早于x的文件并删除它们
  2. 它连接到FTP并将备份文件放在目录中,当前日期为名称
  3. 删除早于x
  4. 的备份的所有备份目录

    由于我不熟悉bash,这是我在网上发现的一堆脚本的混杂。

    这是我的剧本:

    #! /bin/bash 
    
    BACKDIR=/var/www/wp-content/backups
    
    #----------------------FTP Settings--------------------#
    
    FTP=Y
    
    FTPHOST="host"
    FTPUSER="user"
    FTPPASS="pass"
    FTPDIR="/backups"
    LFTP=$(which lftp)      # Path to binary
    
    #-------------------Deletion Settings-------------------#
    
    DELETE=Y
    
    DAYS=3 # how many days of backups do you want to keep?
    
    TODAY=$(date --iso) # Today's date like YYYY-MM-DD
    RMDATE=$(date --iso -d  $DAYS' days ago') # TODAY minus X days - too old files
    
    #----------------------End of Settings------------------#
    
    if  [ -e $BACKDIR ]
    then
    
    if  [ $DELETE = "Y" ]
    then
        find $BACKDIR -iname '*.zip' -type f -mtime +$DAYS -delete
        echo "Old files deleted."
    fi
    
    if  [ $FTP = "Y" ]
    then
    
        echo "Initiating FTP connection..."
    
        cd $BACKDIR
    
        $LFTP << EOF
        open ${FTPUSER}:${FTPPASS}@${FTPHOST}
        mkdir $FTPDIR
        cd $FTPDIR
        mkdir ${TODAY}
        cd ${TODAY}
        mput *.zip
        cd ..
        rm -rf ${RMDATE}
        bye
    
    EOF
    
    echo "Done putting files to FTP."
    
    fi
    
    else
        echo "No Backup directory."
        exit
    fi
    

    有两件我无法完成的具体事情:

    1. find命令不会删除本地备份目录中的任何旧文件。
    2. 我想mput只放置今天创建的.zip文件。
    3. 提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

仅发送今天创建的zip文件:

MPUT_ZIPS="$(find $BACKDIR -iname '*.zip' -type f -maxdepth 1 -mtime 1 | sed -e 's/^/mput /')"

[...]
$LFTP << EOF
open ${FTPUSER}:${FTPPASS}@${FTPHOST}
mkdir $FTPDIR
cd $FTPDIR
mkdir ${TODAY}
cd ${TODAY}
${MPUT_ZIPS}
cd ..
rm -rf ${RMDATE}
bye

EOF

希望这有助于=)

答案 1 :(得分:0)

2)如果您将今天的备份文件放在一个单独的目录中或将它们链接到一个单独的目录,您可以cd today并只传输这些文件。