我正在使用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
)选项来复制权限,但仍然没有运气。有任何想法吗?
有-i
rsync 选项,代表--itemize-changes
. rsync 手册说它将“输出所有更新的更改摘要”。
它将显示哪些文件和目录已被更改并因此从源目录转移到目标目录。它还将向您展示为什么 rsync 假定文件已被更改,例如,如果这是因为源文件大小与目标文件不同,或者时间戳不同,或者只是权限不同。
这是一个例子。我创建directory1
和directory2
。两者都包含被调用的文件,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
正如托马斯指出的那样,问题与硬盘驱动器的格式有关(建议的解决方案--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)
现在我只能看到更改的文件。感谢大家的帮助。
可能的问题是外部驱动器上的时间戳粒度不同,而 rsync 没有考虑到这一点。您可以使用以下--modify-window
选项解决此问题:
--modify-window
比较两个时间戳时,如果它们在modify_window 的值内,则rsync 会将时间戳视为相等。该值通常为零,但您可能会发现在某些情况下将其设置为更大的值很有用。特别是,当与无法以 1 秒分辨率表示时间的 FAT 文件系统进行传输时,此选项非常有用。
反映修改后的问题:查看rsync 手册页以获取有关--itemize-changes
. 只剩下权限需要解决。大多数易于使用的外部驱动器都是 vfat:Microsoft 格式,您的 Unix 文件权限将不匹配(因为组和其他权限没有类比,也因为大多数应用程序懒得尝试映射执行权限以匹配 Unix)。在这种情况下,您无法复制权限。您可以使用以下选项解决这个--chmod
问题(通过提供一个掩码来告诉rsync
它在目标上可以获得哪些权限):
--chmod
此选项告诉 rsync 将一个或多个逗号分隔的“chmod”字符串应用于传输中文件的权限。 结果值被视为发送方为文件提供的权限,这意味着如果未启用--perms,此选项似乎对现有文件没有影响。