【问题标题】:How to tar while excluding a combination of files and directories如何在排除文件和目录组合的同时进行 tar
【发布时间】:2016-10-06 05:16:04
【问题描述】:

拍卖脚本具有以下目录结构

/var/www/html/
              file1
              file2

/var/www/html/subdir1/
/var/www/html/subdir2/
/var/www/html/subdir3/
/var/www/html/subdirN/

/var/www/html/uploaded/
                       .htaccess            
                       file3
                       file4

                      /banners/
                               file5
                               file6

                      /cache/
                             file7         <<< exclude
                             file8         <<< exclude

                      /hledmd7phk4u5glq5rks8kb621/        <<< exclude
                                                  file9   <<< exclude
                                                  file10  <<< exclude
                      /ad0hmd7phk4u5glq5rks8kb258/        <<< exclude
                                                  file11  <<< exclude
                                                  file12  <<< exclude
                      /zfddfd7phk4u5glq5rks8kb584/        <<< exclude
                                                  file13  <<< exclude
                                                  file14  <<< exclude

目前每晚在 crontab -e 中运行一个 Ubuntu 14.04 tar,它使用绝对路径从 /var/www/html/ 级别备份整个目录。需要一个新的 tar 备份命令,通过排除上面显示的文件和目录的组合来减少夜间备份的大小,同时:

1) 包括目录/var/www/html/uploaded/cache/ 而不包括 /var/www/html/uploaded/cache/下的内容

2) 不包括一长串不断变化的 MD5 目录名称和 它们在 /var/www/html/uploaded/ 下创建的内容

有没有办法在一个 tar 命令中做到这一点?

【问题讨论】:

    标签: ubuntu-14.04 tar


    【解决方案1】:

    对你来说不是最终的解决方案,但这是一种指导性的思维方式:

    对于第一个要求,我们可以像这样使用通配符:

    tar -cvf test.tgz --exclude=/var/www/html/uploaded/cache/*
    

    对于第二个要求,MD5 作为文件名没有字符串模式,因此应该添加更多其他信息来过滤这些目录。

    @ml48603,strcat tar 命令的方法,这里是一个例子:

    tar_all_cmd=tar -cvf test.tgz
    
    dir_name="/var/www/html/uploaded/"
    
    ls $dir_name | while read filename; do if [ ${#filename} -ge 8 ]; then $option_head="--exclude=$dir_name"; tar_all_cmd="${tar_all_cmd}${option_head}${filename}"; fi;  done;
    

    【讨论】:

    • 第一个:/cache/* 将抓取缓存下的所有内容,而不仅仅是缓存,对吗?第二:md5 目录是唯一存在 8 个字符或更大长度的目录名称,因为要保留的最长目录名称是 /banners/,长度为 7 个字符
    • @ml48603 1st,所有东西都在缓存目录而不是缓存目录本身;第二个伟大的见解,更复杂的外壳应该满足这个要求。
    • tar 是否为目录名称提供了一种模式,该目录名称大于设定的字符数?我以前没有写过 shell 脚本。但看起来这将是学习如何做的最佳时机。根据 # echo $SHELL,我的 Ubuntu 服务器正在运行 /bin/bash shell
    • @ml48603 考虑将 strcat --exclude 选项与目录一起使用。我将很快添加一个 shell 示例。
    • hi @ml48603 仅供参考,更新答案为 strcat tar 命令添加示例。欢迎进行更多讨论:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2014-01-17
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多