我知道有一个非常相似的问题这里,但接受的答案与 rsync 无关,并且OP的解决方案不适用于我的情况。
我试图通过将 CentOS 存储库与存储库的磁盘备份进行比较来获取与本地存储库不同的所有更新:
rsync -avh --dry-run --compare-dest=/run/media/user/centos6/updates/x86_64/Packages /home/REPOS/6/updates/x86_64/Packages/ updates
然而,试运行表明所有包都将被转移,而不仅仅是新包。
进行不同的试运行,就像我从存储库复制到磁盘一样,仅传输新包:
rsync -avh --dry-run /home/REPOS/6/updates/x86_64/Packages/ /run/media/djones/centos6/updates/x86_64/Packages
因此,rsync 显然能够区分新文件,但由于某种原因,compare-dest 选项似乎仍然不起作用。
快速但肮脏的解决方案是简单地使用第二个命令转储文件列表,然后将其提供给 rsync。但我真的很想以“正确”的方式做到这一点。
答案1
我也遇到了同样的麻烦,你必须这样做:
rsync -avh --dry-run \
--compare-dest=/run/media/user/centos6/updates/x86_64/ \
/home/REPOS/6/updates/x86_64/Packages \
/path/to/updates
笔记 --compare-dest
是源文件夹的父文件夹Packages
,不要放在/
源文件夹的末尾!
答案2
您需要类似的内容:(
rsync --compare-dest=$local_repo/ $centos_repo/ $differences/
将文件夹定义为变量或将变量更改为路径,路径必须以 / 结尾)
$differences
可能会更改为当前数据或类似的内容。
它将 centos_repo 和 local_repo (centos_repo 是源)之间的文件夹内的差异复制到差异文件夹。它创建整个目录树,但仅插入差异中已更改的文件。
如果有人使用它进行备份,请务必记住,在源(centos_repo)中删除并在比较(local_repo)中存在的文件不会复制到差异中
答案3
rsync 不仅在确定文件是否“相同”时检查内容。为了使其正常工作,您有时应该使用“--no-times”(这个曾经对我有用过一次)或“--no-perms”、“--no-owner”、“--no”等标志-group、“--checksum”等
(https://askubuntu.com/questions/1139188/rsync-compare-dest-does-not-work)