自动脚本定期复制文件夹

自动脚本定期复制文件夹

我使用 centos 7

我有以下脚本来复制特定文件夹并让它称为源

每半小时发送到名为 Destination 的目标文件夹

并且我希望源文件夹在目标文件夹下命名为 Source+currentdate

我应该把这个脚本放在哪里每半小时执行一次

 Today=$(date +"%Y-%m-%d-%H%M")
cd /
BACKUP_PATH='Destination'
cd ${BACKUP_PATH}
mkdir ${Source}.{Today}

我的脚本有什么问题

答案1

我将提供一个很久以前编写的脚本。您可以随意使用它。此 bash 脚本将获取一个文件夹并将其压缩为 tar.gz 并将其放入备份文件夹中。

#!/bin/bash
TIME=`date +%b-%d-%y`                    # This Command will add date in 
# Backup File Name.
FILENAME=backup-$TIME.tar.gz  # Here i define Backup file name 
format.
SRCDIR=/opt/files/                         # Location of Important Data 
# Directory (Source of backup).
DESDIR=/opt/backups                  # Destination of backup file.
tar -cpzf $DESDIR/$FILENAME $SRCDIR

然后将其保存为类似

 /usr/bin/backup.sh

并确保使用 chmod 允许系统运行该命令

chmod +x /usr/bin/backup.sh

要使脚本每半小时运行一次。您需要配置 crontap。一种方法是运行此命令。

crontab -e

并添加以下行

30 * * * *  /usr/bin/backup.sh

希望这对你有帮助 :)

答案2

如果你不想有任何复杂性,你可以直接将这一行添加到 crontab 中:

/usr/bin/tar czvf /destination/dir/backup-$(date +%Y-%m-%d.%H_%M).tar /dir/to/backup

您还可以制作一个按周轮换的简单日志文件

#!/bin/bash
# Date command expands to the day of week in cron format
LOG=/var/log/backup.$(date +%w).log
# Let's check if the log file is old, and if it is, we will empty before starting logging again  
# If day of the last backup not equal to today you put nothing to log (so you empty it)
if [[ $(tail -n1 $LOG | awk '{print $3}' ) != $(date +%d) ]]; then
     : > $LOG
fi
# Then you backup. This date command will format name as backup-YEAR-MONTH-DAY.HOUR_MINUTE.tar.gz
tar czvf /destination/dir/backup-$(date +%Y-%m-%d.%H_%M).tar.gz /dir/to/backup
# This conditional redirects the echo to log file
if [[ $? == 0 ]]; then
    echo "$(date) OK: Backup completed succesfully" >> $LOG
else
    echo "$(date) ERROR: Backup failed" >> $LOG
fi

生成的日志文件将类似于 backup.0.log、backup.1.log 等等...

相关内容