运行 rsync 时仅查看更改

运行 rsync 时仅查看更改

我用来rsync将文件从 Mac 备份到外部硬盘。例如:

rsync -av --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

在执行此操作之前,我通过添加选项在试运行中运行相同的命令-n

rsync -avn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

据我了解,我应该只看到复制/更改内容的差异,但由于某种原因,所有文件夹和文件都被打印出来。不过,如果我在本地使用 2 个文件夹测试相同的命令,我只能看到更改的差异。为什么会这样?我该如何解决?

更新:

添加-i选项后(感谢学习者的回答),我能够确定为什么所有文件都被列出。看来权限没有被复制。所有文件夹(和文件)都有:

.d...p... my folder/

我添加了-p(和-o-g)选项来复制权限,但仍然没有运气。有任何想法吗?

答案1

-irsync 选项,代表--itemize-changes. rsync 手册说它会“输出所有更新的更改摘要”

它将显示哪些文件和目录已更改并因此从源目录转移到目标目录。它还将向您展示为什么 rsync 假设文件已更改,例如,如果是因为源文件大小与目标文件不同,或者时间戳不同,或者可能只是权限不同。

这是一个例子。我创建了directory1directory2.两者都包含名为的文件textfile,并且两个文件内部都只有“A”字母。但directory1中的文件有不同的时间戳。所以,执行rsync -ahzi directory1/ directory2/给了我:

.d..t...... ./
>f..t...... textfile

>意味着文件被传输到本地目标,因为它是不同的(192.168.1.100:/some/directory例如,如果您将文件同步到,您会看到<,因为那样它将是远程目标)。f代表“文件”,t表示该文件的时间戳不同。

现在如果文件的内容也发生了变化怎么办?我编辑了directory1中的文本文件,因此它包含字母“AB”。然后我执行了rsync -ahzi directory1/ directory2/

.d..t...... ./
>f.st...... textfile

显示>文件已传输到目标,因为目标不同。它s告诉我们文件大小不同,并且t时间戳也不同。

您可以在该输出中看到的其他“标志”包括:

p - Permission are different
o - Owner is different
g - Group is different
a - The ACL information changed

在我的来源中,我得到了所有这些标志的解释:http://andreafrancia.blogspot.com/2010/03/as-you-may-know-rsyncs-delete-options.html

答案2

正如托马斯指出的那样,问题与硬盘驱动器的格式有关(建议的解决方案--chmod对我不起作用)。我的外部硬盘是ExFAT,Mac 的硬盘是Mac OS Extended。所以我做了一些谷歌搜索并找到了解决方案在这里>>

a:存档,替换 rlptgoD 开关(递归目录、保留符号链接、保留权限、保留修改时间、保留组、保留所有者和保留设备文件)。

问题是 Linux exFAT 不能很好地处理与权限相关的开关(pgo),因此解决方案是使用以下开关运行 rsync,删除 p、g 和 o:

所以我的问题的答案是:

rsync -rltDvn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

现在我只能看到更改的文件。感谢大家的帮助。

答案3

可能的问题是外部驱动器上的时间戳粒度不同,而 rsync 没有考虑到这一点。您可以使用以下方法解决此问题--modify-window选项:

--modify-window
比较两个时间戳时,如果它们在modify_window 的值内,则rsync 会将时间戳视为相等。该值通常为零,但您可能会发现在某些情况下将其设置为更大的值很有用。特别是,当与无法以 1 秒分辨率表示时间的 FAT 文件系统进行传输时,此选项非常有用。

反映修改后的问题:看看rsync 手册页有关 的位的详细信息--itemize-changes。只剩下权限需要解决。大多数易于使用的外部驱动器都是 vfat:Microsoft 格式,您的 Unix 文件权限将不匹配(因为没有类似的团体其他权限,而且还因为大多数应用程序不会费心去尝试映射执行权限以匹配 Unix)。在这种情况下,你不能复制权限。您可以使用以下选项解决这个--chmod问题(通过提供一个掩码来告诉rsync它在目标上可以获得哪些权限):

--chmod
此选项告诉 rsync 将一个或多个逗号分隔的“chmod”字符串应用于传输中文件的权限。 结果值被视为发送方为文件提供的权限,这意味着此选项似乎对现有文件没有影响,如果--烫发未启用。

相关内容