开发工具

Shell之 rsync 指令

rsync 是一个用于文件同步和传输的强大工具,它可以在本地或通过网络高效地同步文件和目录。rsync 的主要特点包括增量传输(只传输变化的部分)、保持文件权限、时间戳和符号链接等。


基本语法

rsync [选项] 源路径 目标路径

常用选项

-a 或 --archive:归档模式,表示递归传输并保持符号链接、权限、时间戳、用户/组所有权、设备文件和特殊文件。

-v 或 --verbose:详细模式,显示传输过程中的详细信息。

-z 或 --compress:在传输过程中压缩数据。

-r 或 --recursive:递归传输目录。

-t 或 --times:保持文件时间戳。

-p 或 --perms:保持文件权限。

-o 或 --owner:保持文件所有者(超级用户权限)。

-g 或 --group:保持文件所属组(超级用户权限)。

-l 或 --links:复制符号链接作为符号链接。

-u 或 --update:仅在目标文件比源文件旧或目标文件不存在时传输文件。

--delete:删除目标路径中源路径不存在的文件(使目标路径成为源路径的镜像)。

-e:指定用于远程传输的 shell 命令,通常用于通过 SSH 传输。


示例

1、本地同步

rsync -av /source/directory/ /destination/directory/

这将把 /source/directory/ 目录及其内容同步到 /destination/directory/,保持所有属性。


2、通过 SSH 远程同步

rsync -avz -e ssh /local/directory/ user@remote_host:/remote/directory/

这将使用 SSH 将 /local/directory/ 目录及其内容同步到远程主机 remote_host 的 /remote/directory/。


3、同步时删除目标中多余的文件

rsync -avz --delete /source/directory/ /destination/directory/

这将在同步过程中删除 /destination/directory/ 中在 /source/directory/ 中不存在的文件,使 /destination/directory/ 成为 /source/directory/ 的镜像。


4、只同步修改过的文件

rsync -avz -u /source/directory/ /destination/directory/

这将只同步在 /source/directory/ 中修改过或新添加的文件到 /destination/directory/。


注意事项

1、rsync 在同步大量文件时可能非常耗时,特别是在网络传输时。使用 -z 选项可以压缩数据以减少传输时间,但会增加 CPU 使用率。

2、在使用 --delete 选项时要特别小心,因为它会删除目标路径中源路径不存在的文件。

3、远程同步时,确保你有权访问远程主机上的目标路径,并且网络连接稳定。

4、对于大型目录或文件集,考虑在测试环境中先运行 rsync 命令,以验证其行为符合预期。