
我使用 rsync 备份相机中的照片,方法是:
rsync -vzrtl --progress --stats --timeout=0 host destination
现在,当我进行第一次备份时,我处于不同的时区,然后我移动到不同的时区,并在笔记本电脑上更改了它(我使用 ubuntu 10.04.4)。今天我正在备份我的图片,我发现时间戳不同(我的意思是你可以用'ls -lt'看到的时间戳),所以rsync会复制整个目录(我总是先使用选项-n运行rsync来知道它将传输的文件列表)。现在这很愚蠢,因为文件实际上是相同的。所以我改回以前的时区,事实上,文件时间戳在我的相机上更改为相同的 - 我觉得这有点奇怪。
我再次运行 rsync,文件仍然不同:@ 现在,我不想再次复制文件,这很愚蠢,你能建议一个干净的解决方案吗?今后我该如何防止这种情况发生?如果我更改为以前的时区,为什么文件仍然不同?
我发现文件的访问和更改时间不同,使用stat。例如:
在主机上
File: `DSC00003.JPG'
Size: 3068392 Blocks: 6016 IO Block: 32768 regular file
Device: 821h/2081d Inode: 2109 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/simona) Gid: ( 1000/simona)
Access: 2013-03-26 00:00:00.000000000 +0000
Modify: 2007-12-25 22:48:20.000000000 +0000
Change: 2007-12-25 22:48:20.000000000 +0000
并在目的地
File: `DSC00003.JPG'
Size: 3068392 Blocks: 6008 IO Block: 4096 regular file
Device: 802h/2050d Inode: 245762 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/simona) Gid: ( 1000/simona)
Access: 2013-03-26 10:24:49.000000000 +0000
Modify: 2007-12-25 22:48:20.000000000 +0000
Change: 2013-02-09 00:11:09.000000000 +0000
有没有办法防止 rsync 覆盖目的地上最近修改过的图片?
答案1
为了回答这个问题我做一个假设:
您正在本地使用 rsync,从已安装的 SD 卡传输到备份空间
MMC 使用 FAT 文件系统进行格式化,因此设置它总是有用的,--modify-window=1
因为 FAT 文件系统以 2 秒分辨率存储时间戳。
man rsync
--size-only
给出忽略last-modified
文件标志的选项.因此,只有修改大小的文件(例如编辑过的文件)才会同步。
另一种选择是将选项设置--modify-window
为两个 timzeone 之间的时间差(以秒为单位)。例如modify-window=3660
,如果有 1 小时的差异,则使用 2 小时
可能是您的 UTC 设置有问题。
date --utc
您可以通过输入Xour softwareclock is generated by 来检查您的硬件时钟设置是否正确date
。
该值应与您的本地时区与格林威治标准时间的差异相同。
您的硬件时钟应始终设置为 UTC,以便即使您更改时区(软件时钟),所有时间戳也会设置正确。
如果 UTC 时间不正确,请检查 BIOS 中的设置是否正确。如果不正确,请更正。
如果已设置,您可以检查/etc/default/rcS
。应该是以下行(Ubuntu 12.04)
#assume that the BIOS clock is set to UTC time (recommended)
UTC=yes