我用来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
有-i
rsync 选项,代表--itemize-changes
. rsync 手册说它会“输出所有更新的更改摘要”。
它将显示哪些文件和目录已更改并因此从源目录转移到目标目录。它还将向您展示为什么 rsync 假设文件已更改,例如,如果是因为源文件大小与目标文件不同,或者时间戳不同,或者可能只是权限不同。
这是一个例子。我创建了directory1
和directory2
.两者都包含名为的文件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”字符串应用于传输中文件的权限。 结果值被视为发送方为文件提供的权限,这意味着此选项似乎对现有文件没有影响,如果--烫发未启用。