rsync 仍然复制排除中的文件夹

rsync 仍然复制排除中的文件夹

我试图复制一个文件夹并排除两个子目录,但 rsync 不断复制排除中的目录。

rsync -savzPh -e "ssh -p 237"  --include '*/' --include '*.pdf' --include '*.PDF' --exclude '*' --exclude 'a1' --exclude 'my archive2' user@ip:"/home/path/my folder" .

来源看起来像这样:

  • /home/路径/我的文件夹/folder1
  • /home/路径/我的文件夹/folder2
  • /home/路径/我的文件夹/a1
  • /home/路径/我的文件夹/a2
  • /home/path/我的文件夹/我的存档
  • /home/path/我的文件夹/我的 archive2

排除参数中的文件夹中的 pdf 文件仍然被复制。

你知道我做错了什么吗?

答案1

Rsync 将根据第一次匹配来解析包含/排除规则。在您的情况下,包含规则在有机会解析“排除”规则之前与“排除”文件夹(“a1”和“我的存档2”)匹配。

因此,在这种情况下,您需要以不同的方式对包含/排除标志进行排序。

如果您想复制“我的文件夹”的全部内容(不包括“a1”和“我的存档2”子目录),那么您的命令应该是:

rsync -savzPh -e "ssh -p 237" --exclude 'a1' --exclude 'my archive2' user@ip:"/home/path/my folder" .

如果您只需要该目录结构中的 PDF 文件(不包括“a1”和“my archive2”),请尝试以下结构:

rsync -savzPh -e "ssh -p 237"  --exclude 'a1' --exclude 'my archive2' --include '*.pdf' --include '*.PDF' --include '*/' --exclude '*' user@ip:"/home/path/my folder" .

请注意,在第二个版本中,您首先排除文件夹,从而跳过这些文件夹,然后包含 PDF 扩展名和子目录(否则,由于最后一条规则,它将跳过所有子目录),最后排除所有内容(其他)

尝试将“包含”规则视为“不排除的内容”,但顺序相反。

使用 rsync 3.2.3 测试

相关内容