排除目录并删除旧备份
Exclude directories and delete old backup
我正在使用以下简单脚本通过 tar
备份我的所有网站
TIME=`date +%b-%d-%y`
FILENAME=backup-$TIME.tar.gz
#Parent backup directory
backup_parent_dir="/backup/httpdocs"
#Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 755 "${backup_dir}"
SRCDIR=/var/www/sites #Location of Important Data Directory (Source of backup).
tar -cpzf $backup_dir/$FILENAME $SRCDIR
现在,这很好,但如果我可以通过相同的脚本完成,我需要两件事
我可以排除 /var/www/sites
目录中的某些文件夹吗,比如我不想备份 /var/www/sites/abc.com/logs
文件夹。我可以在此脚本中定义它和其他一些子目录吗?
此脚本通过 cronjob 获取指定文件夹 /backup/httpdocs
中 tar 格式的所有站点,该 cronjob 每天在夜间运行,并且用于旧 tar 球(7 岁以上)天)我必须手动删除它们,所以它有可能通过相同的脚本运行,所以当它运行时,它会检查是否存在超过 7 天的备份并自动删除它?
编辑:
谢谢大家,这就是我现在使用的备份,不包括日志文件,并删除超过 7 天的所有内容
#!/bin/bash
#START
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.
# Parent backup directory
backup_parent_dir="/backup/httpdocs"
# Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 755 "${backup_dir}"
SRCDIR=/var/www/vhosts # Location of Important Data Directory (Source of backup).
tar -cpzf $backup_dir/$FILENAME $SRCDIR --exclude=$SRCDIR/*/logs
find ${backup_parent_dir} -name '*' -type d -mtime +2 -exec rm -rfv "{}" \;
#END
使用--排除选项
tar -cpzf $backup_dir/$FILENAME $SRCDIR --exclude=$SRCDIR/*/logs
使用从星期几派生的标识符命名您的备份文件。这将确保每天的新文件将覆盖任何现有文件。
Day:
a Day of the week - abbreviated name (Mon)
A Day of the week - full name (Monday)
u Day of the week - number (Monday = 1)
d Day of the month - 2 digits (05)
e Day of the month - digit preceded by a space ( 5)
j Day of the year - (1-366)
w Same as 'u'
发件人:http://ss64.com/bash/date.html
例如:
TARGET_BASENAME= `date +%u`
从 tar 中排除:
tar -cpzf $backup_dir/$FILENAME --exclude=/var/www/sites/abc.com/logs $SRCDIR
查找并删除旧备份:
find ${backup_parent_dir} -type f -name 'backup-*.tar.gz' -mtime +7 -delete
find
的过滤器是保守的:选择匹配 backup-*.tar.gz
的名称可能会使 -type f
(仅文件)选项无用。我添加它以防万一您也有具有此类名称的目录。 -mtime +7
选项需要您检查,因为 超过 7 天 不够准确。根据您的想法,它可能是 +6
、+7
或 +8
。请查看 find
手册页并自行决定。请注意,选择要删除的备份 不是 基于它们的名称,而是根据它们的 上次修改 的日期。如果您在创建后对其进行修改,则可能不是您想要的。让我们知道。
选项 1 当不多时 files/directories 排除
tar -cpzf $backup_dir/$FILENAME --exclude=$SRCDIR/dir_ignore --exclude=$SRCDIR/*.log $SRCDIR
或者如果您有很多条目要排除,最好在文件中完成
tar -cpzf $backup_dir/$FILENAME -X /path/to/exclude.txt $SRCDIR
其中 /path/to/exclude.txt 文件看起来像
/var/www/dir_to_ignore
/var/www/*.log
不能使用变量,但可以使用通配符
第二个问题之前两个人都回答的很好,我个人很喜欢
find ${backup_parent_dir} -type f -name 'backup-*.tar.gz' -mtime +7 -delete
我正在使用以下简单脚本通过 tar
备份我的所有网站TIME=`date +%b-%d-%y`
FILENAME=backup-$TIME.tar.gz
#Parent backup directory
backup_parent_dir="/backup/httpdocs"
#Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 755 "${backup_dir}"
SRCDIR=/var/www/sites #Location of Important Data Directory (Source of backup).
tar -cpzf $backup_dir/$FILENAME $SRCDIR
现在,这很好,但如果我可以通过相同的脚本完成,我需要两件事
我可以排除
/var/www/sites
目录中的某些文件夹吗,比如我不想备份/var/www/sites/abc.com/logs
文件夹。我可以在此脚本中定义它和其他一些子目录吗?此脚本通过 cronjob 获取指定文件夹
/backup/httpdocs
中 tar 格式的所有站点,该 cronjob 每天在夜间运行,并且用于旧 tar 球(7 岁以上)天)我必须手动删除它们,所以它有可能通过相同的脚本运行,所以当它运行时,它会检查是否存在超过 7 天的备份并自动删除它?
编辑:
谢谢大家,这就是我现在使用的备份,不包括日志文件,并删除超过 7 天的所有内容
#!/bin/bash
#START
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.
# Parent backup directory
backup_parent_dir="/backup/httpdocs"
# Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir="${backup_parent_dir}/${backup_date}"
echo "Backup directory: ${backup_dir}"
mkdir -p "${backup_dir}"
chmod 755 "${backup_dir}"
SRCDIR=/var/www/vhosts # Location of Important Data Directory (Source of backup).
tar -cpzf $backup_dir/$FILENAME $SRCDIR --exclude=$SRCDIR/*/logs
find ${backup_parent_dir} -name '*' -type d -mtime +2 -exec rm -rfv "{}" \;
#END
使用--排除选项
tar -cpzf $backup_dir/$FILENAME $SRCDIR --exclude=$SRCDIR/*/logs
使用从星期几派生的标识符命名您的备份文件。这将确保每天的新文件将覆盖任何现有文件。
Day: a Day of the week - abbreviated name (Mon) A Day of the week - full name (Monday) u Day of the week - number (Monday = 1) d Day of the month - 2 digits (05) e Day of the month - digit preceded by a space ( 5) j Day of the year - (1-366) w Same as 'u'
发件人:http://ss64.com/bash/date.html
例如:
TARGET_BASENAME= `date +%u`
从 tar 中排除:
tar -cpzf $backup_dir/$FILENAME --exclude=/var/www/sites/abc.com/logs $SRCDIR
查找并删除旧备份:
find ${backup_parent_dir} -type f -name 'backup-*.tar.gz' -mtime +7 -delete
find
的过滤器是保守的:选择匹配 backup-*.tar.gz
的名称可能会使 -type f
(仅文件)选项无用。我添加它以防万一您也有具有此类名称的目录。 -mtime +7
选项需要您检查,因为 超过 7 天 不够准确。根据您的想法,它可能是 +6
、+7
或 +8
。请查看 find
手册页并自行决定。请注意,选择要删除的备份 不是 基于它们的名称,而是根据它们的 上次修改 的日期。如果您在创建后对其进行修改,则可能不是您想要的。让我们知道。
选项 1 当不多时 files/directories 排除
tar -cpzf $backup_dir/$FILENAME --exclude=$SRCDIR/dir_ignore --exclude=$SRCDIR/*.log $SRCDIR
或者如果您有很多条目要排除,最好在文件中完成
tar -cpzf $backup_dir/$FILENAME -X /path/to/exclude.txt $SRCDIR
其中 /path/to/exclude.txt 文件看起来像
/var/www/dir_to_ignore
/var/www/*.log
不能使用变量,但可以使用通配符
第二个问题之前两个人都回答的很好,我个人很喜欢
find ${backup_parent_dir} -type f -name 'backup-*.tar.gz' -mtime +7 -delete