![使用 rsync 排除列表从主目录中排除文件夹](https://linux22.com/image/1372111/%E4%BD%BF%E7%94%A8%20rsync%20%E6%8E%92%E9%99%A4%E5%88%97%E8%A1%A8%E4%BB%8E%E4%B8%BB%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%8E%92%E9%99%A4%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我正在尝试使用排除文件设置rsync
OS 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/
,但对于您来说,这并不是一件非常糟糕的事情。