我在车上播放的音乐来自 FAT32 USB 记忆棒。我用来放歌曲的文件夹存储在我的 EXT4 硬盘上。我经常添加/删除/重新标记歌曲,偶尔也想将rsync
更改写入 USB 记忆棒。但出于某些未知原因(可能是权限?),rsync
每次都会复制所有文件,而不仅仅是更改的文件。我rsync
这样调用:
rsync -vrlptgD source dest
我怎样才能让它按我想要的方式工作(即知道文件何时未被更改并且不复制它)?
答案1
Javier Rivera 的答案有效,但 rsync 检查和比较所有文件校验和需要很长时间。我发现使用以下选项对我来说效果更好:
rsync -rtv --modify-window=1 /source /dest
此--modify-window=1
开关允许时间戳有 ±1 秒的差异。启用此选项后,时间戳比较将更加宽松,并忽略 NTFS/FAT 和 Unix 文件系统之间微小的时间差异。
来源(德国):http://www.kai-hildebrandt.de/tutorials/rsync.html
附注:请注意,夏令时每年会导致两次完整的文件传输。请参阅这里了解更多详细信息和可能的解决方案。
答案2
FAT32 中的时间戳与 unix 中的时间戳差别太大,无法依靠它们来检查文件更改,您还应该使用 -c 开关,它将强制 rsync 比较所有文件以检测更改,而不是依靠时间戳。它可以工作,但速度较慢。
最后,您的命令中有几个选项不能与 FAT32 文件系统一起使用。
- -l 将保留链接,FAT32 没有链接的概念
- -p 将尝试保留权限,FAT32 上同样没有权限
- -t 将尝试保留修改时间戳,FAT32 上只有一个时间戳
- -g 将尝试保留组所有权,同样不受 FAT32 支持
- -D 将尝试保存特殊文件和设备,您现在知道这里发生了什么。
正如 htorque 所评论的,无效选项不会对您造成任何伤害,它们只是不会产生任何作用。但您必须添加 -c 开关。
这:
rsync -vrc source dest
应该可以工作(至少在我的计算机上可以工作)。
答案3
我在 OSX 下遇到了类似的问题,而 Glutanamate 的答案没有帮助。有些文件相差一个小时;这可能是因为我倾向于经常跨越时区。其他文件相差一天甚至一个月。我不确定这是为什么。对一些时间戳相差很大的文件进行校验显示它们确实是相同的。
无论如何,看起来忽略时间戳--size-only
的选项rsync
对我有用。/ -c
(--checksum
正如 Javier 所提到的)也可以使用,但需要更长的时间。我计时了一下,花了大约一分钟来比较我正在处理的子目录中 GB 左右的校验和。当然,发生这种情况的速度取决于系统中最慢的驱动器;在我的情况下,那是我手机中的 SD 卡。然而,那是在我已经进行了一些文件操作(包括校验和)之后,因此许多文件可能已经被复制到 RAM 缓存中。
答案4
您使用的标志 (-vrlptgD) 太多了。请记住,rsync 是一个 Linux 实用程序,无法有效地与 Fat32 和 NTFS 配合使用。
您必须寻找一些技巧才能使用它。
尝试:
rsync -rvh --size-only --progress --delete /path/to/ext4/ /path/to/fat32/
更多信息这里