0%

Linux rsync

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
2
3
4
5
6
$ rsync -rv user@192.168.100.123:~/dest_file dir/
user@192.168.100.123's password:
receiving file list ... done
a
b
c

显示详细进度

对于小文件而言,没有问题,但是如果文件比较大,比如有几个GB,那么此时--progress参数就会比较有帮助:

1
2
3
4
5
6
7
$ rsync -rv --progress user@192.168.100.123:~/dest_file dir/
user@192.168.100.123's password:
receiving file list ... done
30 files to consider
a 100% 278.25MB/s 0:02:00 (xfer#1, to-check=28/30)
b 100% 289.25MB/s 0:02:00 (xfer#1, to-check=27/30)
c 100% 277.45MB/s 0:02:00 (xfer#1, to-check=26/30)

会实时更新传输的进度。

此时对比scp,可以看到多了一些提示信息,比如会提示:

receiving file list … done
30 files to consider

另外,在实时更新的进度里面也有了一些多出来的信息。

不传输一些文件

比如做软件开发,不希望传输一些编译过程中产生的.o文件,测试的--exclude参数就很完美,如下:

1
2
3
4
5
6
7
$ rsync -rv --progress --exclude "*.o" user@192.168.100.123:~/dest_file dir/
user@192.168.100.123's password:
receiving file list ... done
25 files to consider
a 100% 278.25MB/s 0:02:00 (xfer#1, to-check=28/30)
b 100% 289.25MB/s 0:02:00 (xfer#1, to-check=27/30)
c 100% 277.45MB/s 0:02:00 (xfer#1, to-check=26/30)

此时就看到,本来该传输30组的数据,去掉了部分.o文件。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道