【问题标题】:bash unix incremental script backup issue with omitting directories省略目录的bash unix增量脚本备份问题
【发布时间】:2015-10-25 02:48:26
【问题描述】:

我正在对过去 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

如果有人有解决方案,我将不胜感激。谢谢!

【问题讨论】:

    标签: bash shell unix


    【解决方案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 来测试文件

    【讨论】:

    • 我对此有点困惑。所以我使用 find 和 mtime 来查找过去 24 小时内修改过的文件。所以基本上我可以将它通过管道传输到您推荐的 rsync 命令中?会这样吗? " find "$bksource" -type f -mtime 0 | rsync -av --exclude='/home/' --exclude='/user/' bksource bkdest" 谢谢!
    • 从你的 find 和 mtime 中创建一个文件列表。然后将其作为文件列表通过管道传输到 rsync。那将是一种不同的语法
    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多