我最近重新审视了几年前维护的一个脚本,并尝试让它在新服务器上运行。
它基本上运行以下内容
rsync -vaP --copy-unsafe-links --files-from=dirlist.txt --exclude-from=excludelist.txt . /path/to/backup
dirlist.txt 是一个纯文本文件,其中包含我想要同步的文件的目录.
foo/
foo/bar
foo/bar/gop
foo/tra
foo/bla
foo/bla/rgh
foo/bla/rgh/meh
并且 excludelist.txt 是一个纯文本文件,其中包含我想要从 rsync 命令中排除的上述目录中的特定文件的路径。
当我运行上述操作时,我得到了
/path/to/backup/foo
/path/to/backup/foo/bar
/path/to/backup/foo/bar/gop
/path/to/backup/foo/tra
/path/to/backup/foo/bla
/path/to/backup/foo/bla/rgh
/path/to/backup/foo/bla/rgh/meh
但是源目录中的文件都没有被复制过去吗?
我尝试使用该命令,但是当它运行 rsync 时,-r
最终得到了我不想要的目录foo/don
或复制的目录。foo/tco
foo/
我知道这个脚本在过去已经运行过,所以我很困惑到底发生了什么变化(除了可能的 rsync 版本,但我无法追踪我上次运行的版本)。
更新:我使用的是 rsync 2.5.7 到 2.6.6 的不同版本。2.5.7 版本没有 --files-from 和 --Filter
答案1
不久前我遇到过类似的问题。
我的解决方案是选择如下过滤规则:
rsync --archive -r --filter="merge fromfile" --dry-run
fromfile
- /el[2-4]*
- "*/ppc/*"
+ /el5
- /*
这将排除任何名为 ppc 的子目录、任何顶级目录 el2、el3、el4,包括 el5,并排除其他所有内容。