只有当有东西需要更新时,rsync –link-dest才会创build文件夹

首先,我很难理解--update参数的作用。 我认为没有它,它会逻辑更新任何文件的变化,我相信这就是它,为什么--update参数甚至存在?

其次,与我所问的相关,因为我认为这将解决我的问题,但它没有,我有一堆configuration文件,我想更新到不同的文件夹,每次更改时通过一个cronjob运行下面每一小时或每一天都有一个命令,这样我就可以有一些以前的版本,以防出现问题。 问题是这些文件很less改变,但rsync创build另一个硬链接的文件夹,不pipe它是否改变,这有点烦人,因为那么你有相同的文件夹负载,即使他们是一个硬链接,并没有占用空间,它造成了很多混乱。

有没有办法阻止rsync –link-dest这样做? 也就是说,只有在有任何改变时才创build文件夹,否则什么都不做。 看起来像一个非常基本的情况下,所以我会认为有一个简单的方法来做到这一点的参数,但我无法find答案的任何地方。

rsync -azP --delete --stats --update --log-file=/var/log/rsync/apacheconf date +%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 date +%F_%T .log

关于--update , rsync手册页非常清楚:

-u, --update: skip files that are newer on the receiver 。 这会强制rsync跳过目标上存在的任何文件,并且修改时间比源文件更新。 (如果现有目标文件的修改时间等于源文件的修改时间,如果大小不同,它将被更新。)

如果没有这个选项,src上的旧文件可以覆盖dst上的新文件。 使用这个选项,你可以确定新的文件不会被旧版本覆盖。

对于第二个问题,请避免使用--link-desk 。 这个选项的全部要点是有一个完整的目录/文件树, 不必支付一个真正的,完整的副本的空间。 如果你不想每次都要一棵完整的树,但是你只想看看改变过的文件/目录,就不要使用--link-desk

而且,为了提高文件传输的效率,你可以使用--compare-dest

--compare-dest=DIR此选项指示rsync在目标计算机上使用DIR作为附加层次结构,以比较目标文件与传输(如果目标目录中缺less文件)。 如果在DIR中find与发件人文件相同的文件,则该文件不会被传输到目标目录。 这对于只创build从早期备份更改的文件的稀疏备份很有用。