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

Ale*_*lex 5 backup rsync exclude macos

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

\n\n

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

\n\n
rsync -av --progress --exclude-from='/Users/ABC/excludelist.txt' /Users/ABC /Volumes/Backup_Mac\n
Run Code Online (Sandbox Code Playgroud)\n\n

excludelist.txt包含

\n\n
- /Users/ABC/Dropbox/\n
Run Code Online (Sandbox Code Playgroud)\n\n

它并不排除 Dropbox 文件夹。

\n\n

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

\n\n
- Dropbox/\n
Run Code Online (Sandbox Code Playgroud)\n\n

ABC/Dropbox不包括文件树中其他位置名为 Dropbox 的所有其他文件夹。这不是我想要的 \xe2\x80\x93 我只想排除该文件夹ABC/Dropbox,但包含名为 的任何其他文件夹Dropbox,例如ABC/Application Support/Dropbox

\n\n

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

\n

slh*_*hck 5

简而言之,rsync使用相对路径来确定要排除的内容。来自\xc2\xa0rsync联机帮助页

\n\n
\n

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

\n
\n\n

解决此问题的最简单方法是使用--relative/ -R,它可以让您排除 Dropbox,如下所示:

\n\n
rsync -avR --exclude=\'/Users/alex/Dropbox\' /Users/alex /Volumes/Backup_Mac\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

请注意,这会创建完整的目录树/Volumes/Backup_Mac/Users/alex/,但在您的情况下这并不是一件非常糟糕的事情。

\n