【原】rsync使用
在使用jenkins当跳板机的场景下,有使用git pull 代码到jenkins机器后,需要将代码复制到另一台机器上,常用的复制命令有scp和rsync;现就使用到了rsync进行详解:
rsync是一种快速且通用的文件复制工具,以其Delta传输算法,通过仅发送源文件和目标文件中现有文件之间的差异来减少网络发送的数据量。
常用参数:
-z:传输时进行压缩提高效率 -v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息 -P:显示文件传输的进度信息 -a --archive:归档模式,表示递归传输并保持文件属性,等同于"-rtopgDl" -r --recursive:以递归模式拷贝目录 -R --relative:使用相对路径 -l --links:如果文件是软链接,则拷贝软链接本身而非软链接所指向的文件 -L --copy-links:如果文件是软链接,拷贝软链接指向的文件 -W --whole-file:拷贝文件时不进行增量检测 -t --times:保持 mtime 属性 rsync 默认用"quick check"算法决定哪些文件需要增量传输。此算法只比较文件的大小和 mtime,即使其它属性不同也会认为它们是完全相同的文件,从而不需要增量传输 建议任何时候都加上"-t",否则目标文件 mtime 会设置为系统时间,导致下次更新检查出 mtime 不同而导致增量传输无效
实际工作中使用-avz即可
使用(重要):
源路径如果为目录,不带斜线表示目录本身和目录中的文件,带斜线表示目录中的文件,不包括本身
# 复制远程计算机 foo 上的 /src/bar/ 目录中的文件到本地 /data/tmp 目录中 rsync -avz foo:/src/bar/ /data/tmp # 复制远程计算机 foo 上的 /src/bar/ 目录到本地 /data/tmp 目录中 rsync -avz foo:/src/bar /data/tmp # 以下命令等效 rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo
文件名(* .c)中的通配符扩展为文件列表由 shell 在运行 rsync 之前处理,而不是由 rsync 本身处理
# 复制当前路径下所有以 .c 结尾的文件至远程计算机 foo 的 /src 目录中
# 对于远程系统上已存在的文件,会使用 rsync 远程更新协议,通过仅发送数据中的差异来更新文件
rsync -t *.c foo:/src/