我试图复制一个文件夹并排除两个子目录,但 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 测试