首先,我很难理解这个--update
参数的作用。我认为如果没有它,它会在逻辑上更新任何更改的文件,我相信这就是它的作用,那么为什么这个--update
参数存在呢?
其次,与我问的问题有关,因为我认为它可以解决我的问题,但事实并非如此,我有一堆配置文件,每次更改时,我都希望通过每小时或每天运行以下命令的 cronjob 将它们更新到不同的文件夹中,这样我就可以有几个以前的版本以防出现问题。问题是这些文件很少更改,但无论它是否更改,rsync 都会创建另一个带有硬链接的文件夹,这有点烦人,因为这样你就有大量相同内容的文件夹,即使它们是硬链接并且不占用空间,也会造成很多混乱。
有没有办法阻止 rsync --link-dest 执行此操作?也就是说,只有当任何内容发生变化时才创建文件夹,否则不执行任何操作。这似乎是一个非常基本的情况,所以我以为有一种使用参数的简单方法可以做到这一点,但我找不到任何地方的答案。
rsync -azP --delete --stats --update --log-file=/var/log/rsync/apacheconf
日期 +%F_%T日期 +%F_%T.log -e "ssh -i /home/user/.ssh/id_rsa" /etc/apache2/sites-available --link-dest=/mnt/backup/apache2/apache [email protected]:/mnt/backup/apache2/apache
.log
答案1
关于--update
rsync 手册页非常清楚:
-u, --update: skip files that are newer on the receiver
。这将强制 rsync 跳过目标上存在的任何文件,并且修改时间比源文件更新。(如果现有目标文件的修改时间等于源文件的修改时间,则如果大小不同,则会更新它。)
如果没有此选项,源端的旧文件会覆盖目标端的新文件。使用此选项,可以确保新文件永远不会被旧版本覆盖。
对于第二个问题,只需避免使用--link-desk
。此选项的全部目的是拥有一个完全的目录/文件树没有必须支付真实完整副本的空间。如果您不想每次都看到完整的树,而只想查看更改的文件/目录,请避免使用--link-desk
此外,为了提高文件传输过程的效率,您可以使用--compare-dest
:
--compare-dest=DIR
此选项指示 rsync 使用目标计算机上的 DIR 作为附加层次结构来比较目标文件和进行传输(如果目标目录中缺少文件)。如果在 DIR 中找到与发送方文件相同的文件,则不会将该文件传输到目标目录。这对于创建仅包含与早期备份相比已更改的文件的稀疏备份非常有用。