rsync同步数据时,如果目标文件比源文件还新,则忽略该文件,如何做?

参考回答

在使用 rsync 同步数据时,如果希望目标文件比源文件还新时忽略该文件,可以使用 --ignore-existing 选项来实现。这个选项会跳过目标位置已经存在的文件,即使源文件比目标文件新,也不会覆盖它们。

不过,如果你想确保目标文件比源文件新的情况下才忽略,可以结合使用 --size-only--existing 选项,并根据修改时间进行判断。

示例如下:

rsync -av --ignore-existing /source/directory/ /destination/directory/
Bash

详细讲解与拓展

1. --ignore-existing 选项

--ignore-existing 选项的作用是忽略目标目录中已经存在的文件,无论源文件是否比目标文件新。也就是说,如果目标文件已经存在,rsync 不会进行任何更新或覆盖。这种方式不关心文件是否更新,只是直接跳过已存在的文件。

例如:

rsync -av --ignore-existing /source/directory/ /destination/directory/
Bash

在这种情况下,即使源文件比目标文件新,rsync 也会跳过它们,不进行同步。

2. --size-only 选项

如果你希望 rsync 根据文件大小来判断是否需要同步,而不是根据时间戳,可以使用 --size-only 选项。这样即使源文件比目标文件新,rsync 也会根据文件的大小来决定是否更新目标文件。

例如:

rsync -av --size-only /source/directory/ /destination/directory/
Bash

在这种情况下,rsync 会检查源文件和目标文件的大小。如果它们不同,rsync 会覆盖目标文件,反之则跳过。

3. 结合 --update-u)选项

--update 选项可以确保只有源文件比目标文件更新时才会进行同步。当目标文件比源文件新时,它会跳过目标文件。使用这个选项可以避免覆盖目标中较新的文件。

例如:

rsync -av --update /source/directory/ /destination/directory/
Bash

在这个例子中,rsync 只会复制源文件中比目标文件新的文件,目标文件比源文件新时会被忽略。

4. --existing 选项

--existing 选项只会更新目标目录中已经存在的文件,而不会创建新的文件。如果某些文件在目标目录中不存在,它们将不会被复制。

例如:

rsync -av --existing /source/directory/ /destination/directory/
Bash

在此命令中,rsync 只会同步目标目录中已有的文件,忽略目标目录中新创建的文件。

总结

  • 如果目标文件比源文件新,并且你想避免覆盖,可以使用 --ignore-existing,它会忽略所有已存在的目标文件。
  • 如果你想根据文件的大小来判断是否更新文件,可以使用 --size-only
  • 如果希望目标文件比源文件新时不被覆盖,则可以使用 --update 选项,它会确保只有源文件比目标文件新的情况下才会同步。

发表评论

后才能评论