linux - 排除目录并删除旧备份

标签 linux bash shell centos

我正在使用以下简单脚本通过 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

现在,这很好,但如果我可以通过相同的脚本完成,我需要两件事

  1. 我可以排除 /var/www/sites 目录中的某些文件夹吗,比如我不想要 /var/www/sites/abc.com/logs 要备份的文件夹。我可以在此脚本中定义它和其他一些子目录吗?

  2. 此脚本通过每天晚上运行的 cronjob 获取指定文件夹 /backup/httpdocs 中所有 tar 格式的站点,对于旧的 tarball(超过 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 中排除:

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 手册页并自行决定。请注意,选择要删除的备份不是基于它们的名称,而是基于它们的最后修改日期。如果您在创建后对其进行修改,则可能不是您想要的。让我们知道。

关于linux - 排除目录并删除旧备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440137/

相关文章:

从函数指针调用函数而不分配?

Linux shell 中的 python 导出环境变量

点开头目录的 Bash 模式,不包括 .和

linux - Centos 6.6 shell 脚本 - 意外 token 附近出现语法错误

linux - 当我启动 apache 并继续杀死我的机器时,如何防止产生大量的 apache 进程?

linux - 如何修复 fedora 中内核和内核开发版本之间的不匹配?

linux - 共享内存页面和 fork

linux - 任何人都可以帮我为以下场景编写脚本吗

linux - shell 脚本中的嵌套 Case 语句 |获取语​​法错误

bash - 使用 bash 命令将标题作为标准输出的前缀?