当前位置:首页 > 投稿 > 正文

Linux高性能文件传输rsync命令(linux文件传送)

rsync(远程同步,Remote Sync)是一种在系统中或两个系统之间复制文件和目录的同步工具。rsync 的一个最大的优点,就是它只复制更改的文件,因而可以减少 CPU 消耗,传输效率更高,在复制文件时节省带宽和时间,如果是大批量文件传输建议使用rsync命令。

scp和rsync命令区别:

  1. scp 基于ssh协议传输更安全
  2. scp又称为全量复制,每次复制都会复制所有文件。
  3. rsync 第一次是把所有文件同步过去,当文件修改后,只把修改的文件同步过去

在 Ubuntu 和 Debian 安装,如果redhat红帽系统只需要把apt修改成yum即可

apt install rsync

rsync 全部参数

-v --verbose 详细模式输出
-q --quiet 精简输出模式
-c --checksum 打开校验开关,强制对文件传输进行校验
-a --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD
-r --recursive 对子目录以递归模式处理
-R --relative 使用相对路径信息
-H, --hard-links 保留硬链结
-p, --perms 保持文件权
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省 DST 的空间
-n, --dry-run 现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是 700 字节
--delete 删除那些 DST 中 SRC 没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现 IO 错误也进行删除
--max-delete=NUM 最多删除 NUM 个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组 ID 匹配为用户名和组名
--timeout=TIME IP 超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为 0
-T --temp-dir=DIR 在 DIR 中创建临时文件
--compare-dest=DIR 同样比较 DIR 中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除 FILE 中指定模式的文件
--include-from=FILE 不排除 FILE 指定模式匹配的文件
--version 打印版本信息


本地文件同步

例如:同步aa文件下面的文件到bb文件夹,默认是单向同步,如果需要双向同步添加 --delete参数

rsync -avzh aa/ bb/


远程传输文件

例如:需要把bb目录复制到某一台服务器的/opt目录,想要注意一点⚠️bb加/表示只同步bb目录下的我就,不加表示同步bb整合目录包含bb夹,下面的截图可以看出两个的区别。

rsync -avzh bb root@172.17.70.3:/opt/


包含和排除需要传输的文件

如果你在传输的时候需要哪些文件或者不需要哪些文件可以根据--include 或者 --exclude参数,如果只想要.java文件不想要 .class文件可以使用下面命令

rsync -avzh bb root@172.17.70.3:/opt/ --incloud=*.java  --exclude=*.class

断点续传

如果文件传输不完整,可以使用 rsync 命令保留不完整的下载,以便在下一次发出相同命令时继续传输。

要恢复传输,使用 --append 选项:

rsync -avzh  --append bb root@172.17.70.3:/opt/ --incloud=*.java  --exclude=*.class

rsync 使用非标准端口

比如现在向机器127.0.0.8传送文件,但此时yunst的 ssh 端口已经不是默认的 22 端口

rsync -avz -e ssh -p $port /opt/src/ root@127.0.0.8:/opt/