使用 rsync 排除列表从主目录中排除文件夹

使用 rsync 排除列表从主目录中排除文件夹

我正在尝试使用排除文件设置rsyncOS X 10.8.4。但是,它无法识别我想要排除的路径。

我想将用户ABC的主目录复制到Backup_Mac已安装的外部驱动器上的文件夹中。

rsync -av --progress --exclude-from='/Users/ABC/excludelist.txt' /Users/ABC /Volumes/Backup_Mac

excludelist.txt包含

- /Users/ABC/Dropbox/

它不排除 Dropbox 文件夹。

现在,如果我将排除文件更改为

- Dropbox/

ABC/Dropbox不仅排除了文件树中其他位置名为 Dropbox 的所有其他文件夹。这不是我想要的 – 我想仅排除文件夹,ABC/Dropbox但包括任何其他名为 的文件夹Dropbox,例如ABC/Application Support/Dropbox

关于如何实现这一点有什么提示吗?我该如何指定相对于备份文件夹或相对于根目录的排除路径?

答案1

简而言之,rsync使用相对路径来确定要排除的内容。从手册 rsync

如果模式以 / 开头,则它将锚定到文件层次结构中的特定位置,否则它将与路径名的末尾匹配。这类似于正则表达式中的前导 ^。因此,“/foo”将匹配位于“传输根目录”(对于全局规则)的名为“foo”的文件(…)

解决这个问题最简单的方法是使用--relative/ -R,它让你像这样排除 Dropbox:

rsync -avR --exclude='/Users/alex/Dropbox' /Users/alex /Volumes/Backup_Mac

该名称relative指的是如何rsync发送路径,因此与指定绝对排除模式无关。

请注意,这将创建完整的目录树/Volumes/Backup_Mac/Users/alex/,但对于您来说,这并不是一件非常糟糕的事情。

相关内容