1

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

该脚本做了几件事。

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

由于我不精通 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 文件。

在此先感谢您的帮助。

4

2 回答 2

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

希望这会有所帮助=)

于 2012-10-19T13:56:36.717 回答
0

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

于 2012-10-19T14:10:15.870 回答