仅在运行 rsync 时查看更改

sas*_*ash 4 osx rsync

我正在使用rsync将文件从 mac 备份到外部硬盘驱动器。例如:

rsync -av --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"
Run Code Online (Sandbox Code Playgroud)

在我这样做之前,我通过添加-n选项在试运行中运行相同的命令:

rsync -avn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

.d...p... my folder/
Run Code Online (Sandbox Code Playgroud)

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

Lea*_*ner 7

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

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

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

.d..t...... ./
>f..t...... textfile
Run Code Online (Sandbox Code Playgroud)

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

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

.d..t...... ./
>f.st...... textfile
Run Code Online (Sandbox Code Playgroud)

还有就是>我们展示的文件转移到目标,因为它是不同的。有人s告诉我们文件的大小不同,并t告诉我们时间戳也不同。

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

p - Permission are different
o - Owner is different
g - Group is different
a - The ACL information changed
Run Code Online (Sandbox Code Playgroud)

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


sas*_*ash 6

正如托马斯指出的那样,问题与硬盘驱动器的格式有关(建议的解决方案--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"
Run Code Online (Sandbox Code Playgroud)

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


Tho*_*key 5

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

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

反映修改后的问题:查看rsync 手册页以获取有关--itemize-changes. 只剩下权限需要解决。大多数易于使用的外部驱动器都是 vfat:Microsoft 格式,您的 Unix 文件权限将不匹配(因为组其他权限没有类比,也因为大多数应用程序懒得尝试映射执行权限以匹配 Unix)。在这种情况下,您无法复制权限。您可以使用以下选项解决这个--chmod问题(通过提供一个掩码来告诉rsync它在目标上可以获得哪些权限):

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