rsync同步数据时,如果目标文件比源文件还新,则忽略该文件,如何做?
参考回答
在使用 rsync
同步数据时,如果希望目标文件比源文件还新时忽略该文件,可以使用 --ignore-existing
选项来实现。这个选项会跳过目标位置已经存在的文件,即使源文件比目标文件新,也不会覆盖它们。
不过,如果你想确保目标文件比源文件新的情况下才忽略,可以结合使用 --size-only
或 --existing
选项,并根据修改时间进行判断。
示例如下:
详细讲解与拓展
1. --ignore-existing
选项
--ignore-existing
选项的作用是忽略目标目录中已经存在的文件,无论源文件是否比目标文件新。也就是说,如果目标文件已经存在,rsync
不会进行任何更新或覆盖。这种方式不关心文件是否更新,只是直接跳过已存在的文件。
例如:
在这种情况下,即使源文件比目标文件新,rsync
也会跳过它们,不进行同步。
2. --size-only
选项
如果你希望 rsync
根据文件大小来判断是否需要同步,而不是根据时间戳,可以使用 --size-only
选项。这样即使源文件比目标文件新,rsync
也会根据文件的大小来决定是否更新目标文件。
例如:
在这种情况下,rsync
会检查源文件和目标文件的大小。如果它们不同,rsync
会覆盖目标文件,反之则跳过。
3. 结合 --update
(-u
)选项
--update
选项可以确保只有源文件比目标文件更新时才会进行同步。当目标文件比源文件新时,它会跳过目标文件。使用这个选项可以避免覆盖目标中较新的文件。
例如:
在这个例子中,rsync
只会复制源文件中比目标文件新的文件,目标文件比源文件新时会被忽略。
4. --existing
选项
--existing
选项只会更新目标目录中已经存在的文件,而不会创建新的文件。如果某些文件在目标目录中不存在,它们将不会被复制。
例如:
在此命令中,rsync
只会同步目标目录中已有的文件,忽略目标目录中新创建的文件。
总结
- 如果目标文件比源文件新,并且你想避免覆盖,可以使用
--ignore-existing
,它会忽略所有已存在的目标文件。 - 如果你想根据文件的大小来判断是否更新文件,可以使用
--size-only
。 - 如果希望目标文件比源文件新时不被覆盖,则可以使用
--update
选项,它会确保只有源文件比目标文件新的情况下才会同步。