排除目录并删除旧备份

时间:2015-09-07 13:41:09

标签: 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

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

  1. 我可以在/var/www/sites目录中排除某个文件夹,就好像我不希望/var/www/sites/abc.com/logs文件夹作为备份一样。我可以在此脚本中定义它和其他一些子目录吗?

  2. 此脚本通过cronjob在指定文件夹/backup/httpdocs中以tar格式获取所有站点,该cronjob每天在夜间运行,对于旧的tarball(超过7天)我必须手动删除它们,所以它在那里可能通过相同的脚本,所以当它运行时,它会检查是否存在超过7天的任何备份,并自动将其删除?

  3. 编辑:

    谢谢大家,这就是我现在正在使用的备份,不包括日志文件和删除超过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
    

3 个答案:

答案 0 :(得分:1)

  1. 使用 - 排除选项

    tar -cpzf $ backup_dir / $ FILENAME $ SRCDIR --exclude = $ SRCDIR / * / logs

  2. 使用从星期几派生的标识符命名备份文件。这将确保每天的新文件将覆盖任何现有文件。

  3.  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`
    

答案 1 :(得分:1)

从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手册页并自行决定。请注意,要删除的备份的选择是,具体取决于其名称,但取决于上次修改的日期。如果您在创建后修改它们可能不是您想要的。请告诉我们。

答案 2 :(得分:1)

    当没有多少要排除的文件/目录时,
  1. 选项1

    tar -cpzf $ backup_dir / $ FILENAME --exclude = $ SRCDIR / dir_ignore --exclude = $ SRCDIR / * .log $ SRCDIR

  2. 或者如果你有很多条目要排除在文件

    中做得更好
    tar -cpzf $backup_dir/$FILENAME -X /path/to/exclude.txt $SRCDIR
    

    其中/path/to/exclude.txt文件看起来像

    /var/www/dir_to_ignore 
    /var/www/*.log
    

    你不能使用变量,但可以使用通配符

    1. 第二个问题在两个人之前得到了很好的回答,我个性的爱

      查找$ {backup_parent_dir} -type f -name' backup - * .tar.gz' -mtime +7 -delete

相关问题