Linux rsync 命令
rsync
也是远程(或本地)复制和同步文件最常用的命令。
与scp
类似。
官方定义为:
rsync - a fast, versatile, remote (and local) file-copyint tool
从定义看,比scp
要强一些。
借助rsync
命令,可以跨目录,跨磁盘和跨网络远程与本地数据进行复制和同步。比如最常用的就是在两台Linux主机之间进行数据的备份。
语法
语法相对而言,比较简单,不过用法其实挺多的。
1 | $ rsync [OPTION...] SRC... [DEST] |
常用的参数为:
-v
: 详细模式输出-r
: 递归拷贝数据,但是传输数据时不保留时间戳和权限-a
: 归档模式, 归档模式总是递归拷贝,而且保留符号链接、权限、属主、属组时间戳-z
: 压缩传输-h
: human-readable--progress
: 显示传输过程--exclude=PATTERN
指定排除传输的文件模式--include=PATTERN
指定需要传输的文件模式
无参数传输
默认情况下,传输一个文件不需要任何参数:
1 | $ rsync user@192.168.100.123:~/dest_file dir/ |
命令执行后,会提示输入远程机器的密码,不过成功后不会显示任何信息,需要自行确认。
常用传输
所以默认情况下,会使用rv参数,不仅可以传输一个目录,也可以是文件:
1 | $ rsync -rv user@192.168.100.123:~/dest_file dir/ |
显示详细进度
对于小文件而言,没有问题,但是如果文件比较大,比如有几个GB,那么此时--progress
参数就会比较有帮助:
1 | $ rsync -rv --progress user@192.168.100.123:~/dest_file dir/ |
会实时更新传输的进度。
此时对比scp,可以看到多了一些提示信息,比如会提示:
receiving file list … done
30 files to consider
另外,在实时更新的进度里面也有了一些多出来的信息。
不传输一些文件
比如做软件开发,不希望传输一些编译过程中产生的.o
文件,测试的--exclude
参数就很完美,如下:
1 | $ rsync -rv --progress --exclude "*.o" user@192.168.100.123:~/dest_file dir/ |
此时就看到,本来该传输30组的数据,去掉了部分.o
文件。