我有两个外部驱动器。其中一个驱动器名为“drive2”,它包含一个名为“Music”的文件夹。该文件夹具有以下结构:
drive2/
/Music/
Pink Floyd/
1982 - Album Name/
01 - Track.flac
02 - Track2.flac
and so on..
因此,由于文件夹层次结构,我想我需要递归同步。
我需要将驱动器 2 中的整个Music
文件夹复制到驱动器 1。我想我可以使用这样的东西:
rsync -av drive2/Music/ drive1/Music/
但是,在某些情况下,我会修改某些歌曲的元数据。这些元数据修改很小,就像更改专辑标题一样,这些修改不一定会改变 FLAC 文件的大小,但它们的 md5 指纹肯定会因为元数据的改变而改变。正确的?
我注意到,当我使用 时rsync -a
,该rsync
实用程序会注意到驱动器 2 上 FLAC 文件的元数据更改,并更新驱动器 1 上的文件以保持同步。仅传输更改的文件,这正是我想要的行为。在我看来,该-a (archive)
标志意味着-u
只更新更改的文件。
但是,我很好奇当rsync
传输更新了元数据的文件时,旧文件是否会在drive1上完全被覆盖?我的意思是它们被完全替换了?在复制新文件之前是否删除了旧文件?
答案1
当 rsync 传输更新元数据的文件时,drive1 上的旧文件是否会被完全覆盖?
是的。默认行为是将当前位于目标位置的文件复制到临时位置。然后对该副本进行任何必要的更新。更新完成后,副本将被重命名为正确的文件,并删除前一个文件。
在复制新文件之前是否删除了旧文件?
对于正在更新的单个文件,默认情况下仅在复制/更新完成后才覆盖该文件。
对于从源中删除的文件,您可以控制是否在数据更新/传输之前、期间或之后删除此类文件。
答案2
Rsync 将旧文件转换为新文件,在此之前,接收器将知道两个文件块的校验和。
答案3
rsync
是一个非常好的备份和一般复制工具,甚至可以通过网络进行复制,我想说比 Nautilus 好得多。
但rsync
同步设置并不简单,更容易备份。如果你愿意的话,你可以尝试一下unison
,这是一个专用的同步工具。