Linux 小记 —— rsync命令
rsync命令
简介
rsync命令来自英文词组remote sync的缩写,其功能是远程数据同步。rsync命令能够基于网络(包含局域网和互联网)快速地实现多台主机间的文件同步工作。与scp或ftp命令会发送完整的文件不同,rsync有独立的文件内容差异算法,会在传送前对两个文件进行比较,只传送两者内容间的差异部分,因此速度更快。
语法格式
rsync 参数 目录名
常用参数
参数 | 描述 |
---|---|
-b |
备份指定目标文件 |
-o |
保留文件原始所有者身份 |
-B |
设置检验算法使用的块大小 |
-p |
保留文件原始权限信息 |
-c |
对文件传输进行校验 |
-P |
显示进度信息 |
-d |
不递归目录文件,不传输子文件 |
-q |
使用精简输出模式 |
-D |
保留设备文件信息 |
-r |
递归处理所有子文件 |
-g |
保留文件原始所有组身份 |
-R |
使用相对路径 |
-h |
显示帮助信息 |
-t |
保留文件时间信息 |
-H |
保留硬链接文件 |
-v |
显示执行过程详细信息 |
-l |
保留软链接文件 |
-x |
设置不跨越文件系统边界 |
-n |
显示将要传输的文件列表 |
-z |
压缩文件 |
参考示例
将本地目录(/Dir)与远程目录(192.168.10.10:/Dir)相关联,保持文件同步:
1
2[root@linuxcool ~]# rsync -r /Dir 192.168.10.10:/Dir
[email protected]'s password: 此处输入远程服务器密码将远程目录(192.168.10.10:/Dir)与本地目录(/Dir)相关联,保持文件同步:
1
2[root@linuxcool ~]# rsync -r 192.168.10.10:Dir /Dir
[email protected]'s password: 此处输入远程服务器密码关联两个本地的目录,保持文件同步:
1
[root@linuxcool ~]# rsync -r /Dir1 /Dir2
列出本地指定目录内的文件列表:
1
2
3[root@linuxcool ~]# rsync /Dir2/
drwxr-xr-x 18 2023/10/19 16:46:42 .
dr-xr-x--- 4,096 2023/10/19 16:46:54 root列出远程指定目录内的文件列表:
1
2
3
4
5
6
7
8[root@linuxcool ~]# rsync 192.168.10.10:/Dir/
[email protected]'s password: 此处输入远程服务器密码
drwxrwxrwt 4,096 2023/10/19 16:47:41 .
-r--r--r-- 11 2023/10/17 03:13:19 .X0-lock
-r-------- 11 2023/10/17 03:05:57 .X1024-lock
-rw------- 532 2023/10/17 02:31:58 .viminfo
-rw-r--r-- 2,587 2023/10/17 02:59:47 anaconda.log
-rw-r--r-- 2,604 2023/10/17 02:59:34 dbus.log
实战演练
1 |
|
这个 Bash 脚本的目的是将当前版本的文件夹内容同步到一个存档目录中,并根据用户的选择决定是否删除当前版本的文件夹。以下是对脚本各部分的详细分析:
定义变量
1
2CURRENT_VERSION="xxx"
ARCHIVE="xxx"- CURRENT_VERSION:指向当前版本的目录,这里是 xxx。
- ARCHIVE:指向存档目录,这里是 xxx。
确保目标目录存在
1
mkdir -p "$ARCHIVE"
- 使用 mkdir -p 命令确保目标存档目录存在。如果目录不存在,mkdir -p 会递归创建目录。
- 如果目录已经存在,mkdir -p 不会报错。
同步当前版本内容到存档目录
1
rsync -av --delete "$CURRENT_VERSION" "$ARCHIVE/"
- rsync -av:使用 rsync 命令同步文件和目录。
- a:归档模式,递归同步目录,并保留符号链接、权限、时间戳、用户和组等信息。
- v:详细模式,显示同步过程的详细信息。
- – –delete:在目标目录中删除那些不再存在于源目录中的文件,这样目标目录与源目录保持完全同步。
- “$CURRENT_VERSION”:源目录,即当前版本的目录 xxx。
- “$ARCHIVE/“:目标目录,即存档目录 xxx。
- rsync -av:使用 rsync 命令同步文件和目录。
提示用户是否删除当前版本文件夹
1
read -p "Do you want to delete the current version folder? (Y/N): " choice
- read -p:提示用户输入选择,并将输入值存储在变量 choice 中。
根据用户输入执行操作
1
2
3
4
5
6
7
8
9
10
11
12
13case "$choice" in
[Yy]* )
echo "Deleting current version folder..."
rm -rf "$CURRENT_VERSION"
echo "Current version folder deleted."
;;
[Nn]* )
echo "Current version folder not deleted."
;;
* )
echo "Invalid input. Please enter Y or N."
;;
esac- case “$choice”:根据用户输入的值执行相应的操作。
- [Yy]*:如果用户输入的是 Y 或 y 开头的任何字符,执行删除操作。
- [Nn]*:如果用户输入的是 N 或 n 开头的任何字符,不执行删除操作。
- *:如果用户输入了其他字符,显示无效输入的提示。
- case “$choice”:根据用户输入的值执行相应的操作。
删除当前版本文件夹
1
rm -rf "$CURRENT_VERSION"
- rm -rf:递归删除指定目录及其内容。
- 在用户确认删除后,rm -rf “$CURRENT_VERSION” 将删除 ./html/ 目录及其中的所有文件和子目录。
输出操作结果或提示信息
- echo:输出操作结果或提示信息到控制台,便于用户了解脚本执行的情况。
总结
这个脚本实现了从当前版本目录到存档目录的文件同步,并且允许用户根据需要选择是否删除当前版本的文件夹。它使用 rsync 来高效地处理文件同步,并使用 Bash 的基本条件判断和输入处理机制来控制删除操作。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Aerbeita's 博客!
评论