![rsync:排除文件中的排除模式不起作用](https://linux22.com/image/107433/rsync%EF%BC%9A%E6%8E%92%E9%99%A4%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%8E%92%E9%99%A4%E6%A8%A1%E5%BC%8F%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我试图从同步中排除所有 vim 备份文件(隐藏的 *.swp 文件)。我的排除文件中的模式如下所示:
**.swp
我的 rsync 调用:
rsync -ravu --exclude=~/sync/exclude.txt /home/username/Documents/ remotehost:/home/username/Documents/
该文件位于同步根的子目录中。它不起作用。 Rsync 也会复制 vim 备份文件。我也尝试过:*.swp
我究竟做错了什么?
答案1
您正在使用--exclude
(需要模式)而不是--exclude-from
(需要包含模式的文件的名称)。
您也不需要-r
( --recursive
) 和-a
( --archive
),因为-a
可以启用递归同步。其实和说明书上的-a
是一样的。-rlptgoD
答案2
对于单个模式,您不需要**
和 ,您不妨只使用--exclude
。该--include
模式确保与该--exclude
模式匹配的目录包含在副本中。
rsync -a --include '*/' --exclude='.*.swp' /home/username/Documents/ remotehost:/home/username/Documents/
如果您的远程用户名/home/username
作为其主目录,您可以使用相对路径进一步简化:
rsync -a --include '*/' --exclude='.*.swp' /home/username/Documents/ remotehost:Documents/
另请记住,如果一个匹配项已存在或正在使用,vim
则将使用其他文件名作为其交换文件。*.swp
但您可以通过这种单一模式捕获其中的大多数。以下是文档警告的内容:
如果该文件已经存在(例如,当您从崩溃中恢复时),则会发出警告并使用另一个扩展名,“.swo”、“.swn”等。
.*.sw[a-p]
如果您足够担心,您可以调整要使用的排除模式。