bash unix增量脚本备份问题,省略目录

时间:2015-08-03 05:09:12

标签: bash shell unix

我正在处理在过去24小时内修改过的备份文件的增量备份。我试图避免复制所有目录,从树命令可以看到。也许正是这样做的cpio。不知道忽略所有文件夹的替代方案。 备份工作完全正常,但它只是复制所有目录,从根目录到文件的目的地。我该怎么做才能复制整个$ bksource中的文件而不是目录。

#!/bin/bash
bkdest="/home/user/backup/incremental"
bksource="/home/user/Documents"
                target=${bkdest}/bk.inc.$(date +%Y_%m_%d_%H_%M_%S)
                mkdir -p $target
                find "$bksource" -type f -mtime 0 | cpio -mdp "$target"

这是备份后的树。我看到所有过去24小时内修改过的文件,但它带来了文件夹目录,但只备份文档中最后修改过的文件,这是好的。

[user@localhost bk.inc.2015_08_02_21_56_41]$ tree
   .
    └── home
        └── user
            └── Documents
                ├── newinc1
                ├── newinc2
                    └── newinc3

如果有人有解决方案,我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

Make use of rsync

rsync -av --exclude='path1/to/exclude' --exclude='path2/to/exclude' bksource bkdest

请注意,使用source和source /是不同的。尾部斜杠表示将文件夹源的内容复制到目标。如果没有尾部斜杠,则表示将文件夹源复制到目标位置。

或者,如果要排除许多目录(或文件),可以使用--exclude-from=FILE,其中FILE是包含要排除的文件或目录的文件的名称。

--exclude也可能包含通配符,例如--exclude=*/.svn*

<强>更新 要仅使用绝对路径传输从find命令获取的文件列表,它可能类似于:

rsync -av --files-from=/path/to/files.txt / /destination/path/

您可以使用--dry-run来测试文件