如何在排除文件和目录的组合时进行tar

时间:2016-06-06 14:31:19

标签: ubuntu-14.04 tar

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

/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 / level备份整个目录。需要一个新的tar备份命令,通过排除上面显示的文件和目录的组合来减少夜间备份的大小:

1)包括目录/ var / www / html / uploaded / cache / while / var / www / html / uploaded / cache /

下的内容

2)排除不断更改的MD5目录名称的长列表 他们在/ var / www / html / uploaded /

下创建的内容

有没有办法在一个tar命令中执行此操作?

1 个答案:

答案 0 :(得分:0)

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

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

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;