Linux rsync使用教程

Linux rsync使用教程 rsync是 Linux/Unix 下非常强大的文件同步工具它以高效、灵活著称支持本地和远程同步、增量传输、保留属性等特性。然而对于初学者甚至一些老手来说源路径末尾是否添加斜杠/有着严格且重要的语义区别。用错了可能导致文件放错位置或者在配合--delete时意外删除数据。本文将深入剖析这一细节并整理 rsync 的常用用法和典型示例帮助你安全、正确地使用 rsync。一、核心区别源路径尾斜杠的有无假设我们有如下目录结构源目录/home/user/data/ ├── file1.txt └── file2.txt 目标目录/backup/当前为空1.1 不带尾随斜杠rsync-av/home/user/data /backup/语义“将整个data目录包括目录本身同步到目标目录。”结果/backup/ └── data/ ├── file1.txt └── file2.txt目标路径下多了一层data目录。1.2 带尾随斜杠rsync-av/home/user/data/ /backup/语义“将data目录里的内容不包括目录本身同步到目标目录。”结果/backup/ ├── file1.txt └── file2.txt目标路径下直接是源目录内的文件没有额外的data层级。二、为什么这个区别很重要2.1 与cp的习惯不同在cp命令中cp -r /home/user/data /backup/和cp -r /home/user/data/ /backup/行为几乎相同都是复制整个目录data目录本身。而rsync严格区分容易让习惯cp的用户犯错。2.2 结合--delete时的风险--delete选项会让 rsync 删除目标目录中源端不存在的文件。这时加不加斜杠会导致完全不同的删除范围。示例假设目标目录/backup/中有两个文件/backup/ ├── old.txt └── data/ └── file1.txt源目录/home/user/data/中只有file1.txt。情况 A带斜杠rsync-av--delete/home/user/data/ /backup/比较的是/backup/的内容与/home/user/data/的内容。由于old.txt在目标中存在而源中不存在它会被删除。结果/backup/下只剩下file1.txt。情况 B不带斜杠rsync-av--delete/home/user/data /backup/比较的是/backup/data的内容与/home/user/data的内容。old.txt位于/backup/下不在/backup/data内因此不会被删除。结果/backup/old.txt保留/backup/data/下同步为file1.txt。由此可见一个斜杠的差异可能带来完全不同的删除行为。三、rsync 常用用法与选项3.1 基本语法rsync[选项]源路径 目标路径源路径和目标路径可以是本地路径也可以是远程路径格式userhost:path。常用选项选项说明-a归档模式保留权限、时间戳、属主属组、递归等相当于-rlptgoD-v显示详细信息verbose-z传输时压缩-P显示进度并支持断点续传相当于--partial --progress--delete删除目标目录中源端不存在的文件-n或--dry-run模拟运行不实际执行用于测试-e ssh指定使用 SSH 作为远程 shell--exclude排除指定文件或目录--include包含指定文件或目录与--exclude配合使用3.2 常见使用场景本地同步# 同步整个目录保留属性rsync-av/source/ /destination/# 仅同步内容不带尾斜杠rsync-av/source/ /destination远程同步推# 将本地目录推送到远程服务器rsync-av-essh/local/data/ user192.168.1.100:/remote/backup/远程同步拉# 从远程服务器拉取数据到本地rsync-av-esshuser192.168.1.100:/remote/data/ /local/backup/增量备份并删除多余文件rsync-av--delete/important/ /backup/important/模拟运行查看将执行哪些操作rsync-av--delete--dry-run /source/ /dest/排除某些文件或目录rsync-av--exclude*.log--excludetemp//source/ /dest/四、实用示例集示例 1网站代码部署rsync-avz--delete--exclude.git--excludenode_modules/local/project/ userserver:/var/www/html/将本地项目目录内容同步到远程服务器删除服务器上多余文件排除.git和node_modules目录并启用压缩。示例 2备份家目录保留权限rsync-av/home/user/ /mnt/backup/user-home/将/home/user/下的所有内容备份到/mnt/backup/user-home/注意源路径末尾斜杠确保不会多一层user目录。示例 3数据迁移断点续传 进度rsync-avP/large_data/ /new_disk/data/使用-P显示每个文件的传输进度并在中断后支持续传。示例 4与 SSH 不同端口rsync-av-essh -p 2222/local/ userremote:/remote/指定 SSH 端口 2222 进行远程同步。示例 5仅同步目录结构不传文件rsync-av-f */-f- */source/ /dest/使用--include和--exclude模式只复制目录结构不复制普通文件。五、总结与最佳实践明确你的意图如果你想同步目录本身 → 源路径不要加尾斜杠。如果你想同步目录内容 → 源路径加上尾斜杠。在脚本中使用前先--dry-run尤其当使用--delete时先用-n模拟运行确认结果符合预期。保持一致性对于目标路径尾斜杠通常不影响最终结果但推荐不加以避免歧义重点在于源路径。结合--delete格外小心如果不想删除目标中的额外文件不要使用--delete如果使用务必确认源路径的写法正确。多用-av组合-a保留了大部分重要属性-v让你清楚看到同步了哪些文件是日常使用的最佳搭档。掌握好源路径尾斜杠的区别是写出正确、安全 rsync 命令的关键一步。希望本文能帮你避开这个常见的“坑”让 rsync 真正成为你得心应手的文件同步利器。