rsync 的一些常用用法
rsync是Linux里常用的一个用于文件同步的命令。
可以替代mv
和cp
命令,也可以和远端主机同步文件(rsync的全称是 remote sync)。最主要的特性就是每次只会传输文件变动的部分,而不是每次都全量同步。
常用参数
-a 参数
-a
参数有两个功能:
- 会遍历源文件,将包含子目录
- 会拷贝文件的元信息,比如文件大小,修改时间等
rsync默认是通过文件大小和修改时间判断文件是否进行过修改
rsync -a source destination
rsync -a source/ destination
上面这两个命令的不同之处是在于,第二条命令会把source下面的文件拷贝到destionation中,而不是将source目录拷贝到destination中
-n 参数
rsync -anv source destination
-n
并不会真正的执行命令,而是模拟执行的结果
-v
会把模拟执行的结果输出到终端
–delete 参数
rsync -av --delete source destination
默认情况下,rsync只确保将源目录中的所有内容拷贝到目标目录中,并不会要求两个目录的文件完全相同。
--delete
参数会确保两个目录中的内容相同,如果目标目录中有多余的文件则会删除
–exclude 参数
--exclude
支持同步文件时排除某些文件
不同步
txt
文件rsync -av --exclude="*.txt" source destination
rsync默认会同步
.
开头的文件,下面的命令可以排除以.
开头的文件rsync -av --exclude=".*" source destination
多个文件需要排除
rsync -av --exclude=".*" --exclude="*.txt" source destination rsync -av --exclude={'.*', '*.txt'} source destination
如果需要排除某个目录下的所有文件,而保留目录
rsync -av --exclude="dir1/*" source destination
–include 参数
--include
指定必须要同步的文件
通常和--exclude
参数同时使用
rsync -av --include="*.txt" --exclude="*" source destination
–link-dest 参数
--link-dest
用来指定同步文件时的基准目录
rsync -av --delete --link-dest=../path source/ destination
如果基准目录相对路径,并且和source、destination目录是同一级的,需要在目录名前加上../
source目录中的文件会和path中的文件进行比较,只会把更新了的文件拷贝到destination目录中,那些没有更新的文件则会和path中的文件生成硬链接
–append 参数
--append
参数接着文件上次中断的地方继续传输
–append-verify 参数
在传输完成时会对文件进行一次校验,如果校验失败,则会重新传输
–checksum 参数
默认情况下rsync在文件传输完成后只进行文件大小和修改时间的判断,使用该参数后将使用文件内容的校验和
-m 参数
不同步空目录
-P 参数
是--partial
和--progress
的结合
rsync在中途传输失败时,默认会删除已经传输完成的文件。--partial
则不会删除文件,下次同步时会再次恢复中断的传输
远程同步
SSH协议
rsync -av source username@remote_host:destination rsync -av username@remote_host:source destination rsync -av -e "ssh -o 2222" username@remote_host:source destination
如果ssh需要有附加的命令需要用
-e
参数
参考链接: