对隐藏文件的态度
默认是否会拷贝隐藏文件? 如何修改这个行为?
会拷贝, 可以用exclude来修改这个行为, --exclude=.git
. 也可以是通配符(不是正则表达式), --exclude=.*
. 可以用多个--exclude
选项. 再来说include, 它是搭配exclude用的, 如果exclude的某个通配符表达包含我们想同步的文件, 可以用include加上这个文件(当然也是支持通配符的). 单独用include没有任何效果, 都是拷贝全部, 包括隐藏文件.
会拷贝哪些文件?
rsync在默认行为下, 会拷贝哪些文件? 举一个场景, 两个目录下, 都有很多文件, 多数内容是一样的, 但是目录A要新一些, 多添加了一些内容. rsync A B, A没有, B有的文件, 会不会被删除? 如果A,B有同名文件, 但是不一样, B上的文件会被覆盖么? 记得有个update选项, 它的行为相比于默认有什么区别?
rsync有一个简单的检查方式, 如果size和modified time相同, 那么不会拷贝.
默认下, 如果不一样, 目的文件是会被覆盖, 但是, 有这些选项可以改变这个行为:
-c(--checksum), 看看它们是不是真的不一样, 当然需要更多CPU时间
--ignore-existing: 如果已经存在了同名文件, 无论怎样, 都不要改了.
--backup: 如果有, 不要覆盖, 加上后缀~
(也可以通过--suffix指定要加的后缀). 然后再传输A中的文件. 也就是说, 本来的和B的, 在A中都会有.
--update: 如果不一样(大小和modified时间), 但是那边更新, 那就不管. 默认是, 就算B更新, 也会被覆盖, 因为要以A为准.
--delete:
rsync A B, A没有, B有的文件, 会不会被删除: 默认不会, 如果加上--delete, 会删除.
/的作用
rsync -a dir host:dest_dir
rsync -a dir/ host:dest_dir
第一种是dest_dir下有dir, 第二种是把dir下所有文件同步过去, 不包括dir本身.