一招解决文件同步问题:rsync用法详解

导语:在工作和生活中,我们经常需要将文件从一个地方复制到另一个地方。传统的复制方法费时费力,而今天我们要介绍的 rsync 命令则可以轻松解决这个问题。本文将详细介绍 rsync 的用法,让你轻松掌握文件同步的技巧。


目录

一、rsync简介

二、rsync的基本用法

1、本地同步

2、远程同步

3、增量同步

三、rsync的高级用法

1、排除指定文件或目录

2、保留文件属性

3、监视文件变化并自动同步

四、rsync的妙用


一、rsync简介

rsync 是一款强大的文件同步工具,可以在本地和远程系统之间进行文件传输。它支持多种协议,包括 FTP、SFTP、SSH 等,可以适应不同的网络环境。rsync 具有高效、灵活和安全的特点,被广泛应用于个人和企业级文件同步。

二、rsync的基本用法

1、本地同步

在本地系统之间同步文件,可以直接使用 rsync 命令。例如,要将当前目录下的文件同步到目标目录,例如:

rsync -avz /path/to/source /path/to/destination

其中,-a 表示归档模式,将文件和目录结构一并复制;-v 表示详细输出,显示同步过程中的信息;-z 表示压缩传输,减少网络开销;/path/to/source 为源目录路径,/path/to/destination 为目标目录路径。

2、远程同步

如果要远程同步文件,需要使用 SSH 协议进行身份验证,可以使用密码或者 RSA 密钥认证,如果未配置 RSA 密钥,命令行会提示输入用户的密码。例如,要将本地文件同步到远程服务器上,例如:

rsync -avz /path/to/source username@remote_host:/path/to/destination

其中,username为远程服务器的用户名,remote_host为远程服务器的IP地址或域名。如果远程服务器不是使用默认的 22 端口怎么办?文章第 4 部分妙用中有提及。后面介绍的其它选项,也适用于远程同步。

3、增量同步

增量同步是指仅将新文件或变更的文件同步到目标目录。增量同步可以减少数据传输的网络流量,提升同步速度和效率。可用于工作目录备份、应用更新等场景,例如:

rsync -auvz /path/to/source /path/to/destination

相比之前的命令,增加了 -u 选项,该选项表示跳过目标目录比源目录更新的文件。

三、rsync的高级用法

1、排除指定文件或目录

在使用 rsync 复制文件时,可以使用 --exclude 选项排除指定文件或目录。例如,要排除名为 .git 的目录,例如:

rsync -avz --exclude='.git' /path/to/source /path/to/destination

如果要排除多个文件或目录,使用 --exclude-from=FILE 选项,将需要排除的文件或目录列出在 FILE 文件中,一个文件或目录占一行。文件或目录可以使用模式匹配。

2、保留文件属性

在使用 rsync 复制文件时,默认情况下会保留源文件的属性,如权限、时间戳等。如果要保留目标文件的属性,可以使用 --no-dereference 选项。例如:

rsync -avz --no-dereference /path/to/source /path/to/destination

3、监视文件变化并自动同步

如果要监视源目录的变化并自动同步到目标目录,可以使用 --watch 选项。例如:

rsync -avz --watch /path/to/source /path/to/destination

四、rsync的妙用

在网络环境不稳定的情况下,大文件传输面临着诸如传输速度慢、频繁中断等挑战。此时,我们需要进行长时间且多次的传输。可以通过循环来实现无人值守,每次 rsync 传输结束后,检查其返回码,如果返回码为0,表示文件传输已完成;若非0,则表示传输过程中断或出错,将再次启动传输过程。例如:

while true; do
    rsync --append -P -e 'ssh -p 9022' username@remote_host:/path/to/xxx.iso /path/to/destination
    if [ $? == 0 ]; then
        exit
    fi
done

其中,--append 表示追加数据到较短的文件,会在增量同步时计算文件大小并直接追加新的数据到文件,节省IO校验的过程;-P 等同于 --partial --progress,--partial 表示保留部分传输的文件,即中断后可断点续传,--progress 表示显示传输过程中的进度;-e 表示指定要使用的远程 shell,在它后面的内容中指定 ssh 及其端口。while 循环中,rsync 命令执行后,通过 $? 判断该命令的返回码是否为 0 来判断传输是否完成。上述内容可以放在 shell 文件中执行,也可以修改为一条命令直接在命令行执行。修改后如下:

while true; do\
   rsync --append -P -e 'ssh -p 9022' username@remote_host:/path/to/xxx.iso /path/to/destination;\
   if [ $? == 0 ]; then\
       exit;\
   fi;\
done

也就是在每行结尾处添加一个反斜线 \ 表示续行,每个 shell 命令结束时添加分号 ; 以示命令结束。也可以将换行符删除,修改后如下:

while true; do rsync --append -P -e 'ssh -p 9022' username@remote_host:/path/to/xxx.iso /path/to/destination; if [ $? == 0 ]; then exit; fi;done

最后还有一点,就是要为 username 配置 SSH 免密登录,也可以使用 sshpass 命令来自动输入密码,这样就可以真正无人值守。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

创意程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值