上一篇
两个linux如何同步文件夹
- Linux
- 2025-07-24
- 5
在Linux中同步两文件夹可用
rsync -avz 源目录 目标目录
,或设定时任务(crontab)定期
在Linux系统中,两个文件夹之间的同步是日常运维和协作中的常见需求,根据不同的场景(如本地同步、远程同步、单向/双向同步),可以选择不同的工具和方法,以下是一份详细的实现指南:
核心工具与基础命令
rsync 命令
-
适用场景:本地或远程文件夹的单向/双向同步,支持增量传输、压缩、权限保留等。
-
基础语法:
rsync [选项] 源文件夹 目标文件夹
-
常用参数:
| 参数 | 作用 |
|—————|———————————————————————-|
|-a
| 归档模式,递归传输并保留文件权限、时间、符号链接等属性 |
|-v
| 显示传输过程 |
|-z
| 传输时压缩数据包 |
|--delete
| 删除目标文件夹中源文件夹不存在的文件(谨慎使用) |
|--progress
| 显示传输进度 |
|-e "ssh"
| 指定远程同步时使用SSH协议 | -
示例:
- 本地同步:将文件夹A同步到文件夹B:
rsync -av --delete /path/to/A /path/to/B
- 远程同步:将本地文件夹推送到远程服务器:
rsync -av -e ssh /local/folder user@remote:/remote/folder
- 本地同步:将文件夹A同步到文件夹B:
SSH免密登录配置
- 目的:简化远程同步流程,避免每次输入密码。
- 配置步骤:
- 生成SSH密钥(若未生成):
ssh-keygen -t rsa -b 4096
- 将公钥复制到远程服务器:
ssh-copy-id user@remote
- 验证免密登录:
ssh user@remote
- 生成SSH密钥(若未生成):
高级同步场景与工具
双向同步与冲突解决
- 工具选择:
- Unison:专为双向同步设计,支持冲突检测与交互式合并。
- 命令行工具:
unison
可同步本地与远程目录,需配合SSH或RSH。
- 安装与使用:
# 安装Unison(以Ubuntu为例) sudo apt install unison # 同步本地文件夹A与远程文件夹B unison -auto -batch A ssh://user@remote//path/to/B
- 冲突处理:通过
-auto
参数自动解决冲突,或手动编辑冲突文件。
实时同步(inotify监控)
- 适用场景:需要实时响应文件夹变化(如开发环境)。
- 实现方式:
# 安装inotify-tools sudo apt install inotify-tools # 监控文件夹变化并触发rsync inotifywait -mr /path/to/source | while read event; do rsync -av --delete /path/to/source /path/to/dest done
- 优点:低延迟,适合高频更新场景。
- 缺点:依赖系统资源,需考虑性能开销。
自动化与定时任务
Cron定时同步
- 配置步骤:
- 编辑Crontab:
crontab -e
- 添加定时任务(例如每小时同步一次):
0 rsync -av --delete /source/folder /destination/folder >> /var/log/sync.log 2>&1
- 编辑Crontab:
- 注意事项:
- 使用绝对路径,避免环境变量干扰。
- 重定向日志以便排查问题。
Systemd服务管理
-
创建同步服务:
# 创建文件 /etc/systemd/system/folder-sync.service [Unit] Description=Folder Sync Service After=network.target [Service] ExecStart=/usr/bin/rsync -av --delete /source/folder /destination/folder Restart=on-failure [Install] WantedBy=multi-user.target
-
启动服务:
systemctl enable --now folder-sync.service
工具对比与选择建议
工具/方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
rsync |
本地/远程单向同步 | 轻量、灵活、支持增量传输 | 需手动处理冲突 |
Unison |
双向同步与冲突管理 | 可视化冲突解决、跨平台 | 配置较复杂 |
inotify+rsync |
实时同步 | 低延迟、自动化 | 高频率操作下性能消耗大 |
Cron/Systemd |
定时自动化同步 | 稳定可靠、无需人工干预 | 依赖系统调度精度 |
常见问题与解决方案
如何同步子文件夹及隐藏文件?
- 解决方法:使用
-a
参数(归档模式),默认会递归处理所有子目录并保留隐藏文件。
如何排除特定文件或目录?
- 示例:
rsync -av --exclude='.tmp' --exclude='/no_backup' /source/ /destination/
中断后如何续传?
- 参数:添加
--partial
和--progress
,支持断点续传并显示进度。
相关问答(FAQs)
Q1:如何通过SSH同步远程服务器的多个文件夹?
- A1:使用
rsync
的多目标语法,rsync -av -e ssh /local/folder user@remote:/remote/folder1 user@remote:/remote/folder2
Q2:同步时如何保留文件的所有者和时间戳?
- A2:添加
-p
参数(-a
已包含此功能),或单独使用:rsync -av --preserve-permissions --times /source/ /destination/