当前位置:首页 > Linux > 正文

两个linux如何同步文件夹

在Linux中同步两文件夹可用 rsync -avz 源目录 目标目录,或设定时任务(crontab)定期

Linux系统中,两个文件夹之间的同步是日常运维和协作中的常见需求,根据不同的场景(如本地同步、远程同步、单向/双向同步),可以选择不同的工具和方法,以下是一份详细的实现指南:


核心工具与基础命令

rsync 命令

  • 适用场景:本地或远程文件夹的单向/双向同步,支持增量传输、压缩、权限保留等。

    两个linux如何同步文件夹  第1张

  • 基础语法

    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

SSH免密登录配置

  • 目的:简化远程同步流程,避免每次输入密码。
  • 配置步骤
    1. 生成SSH密钥(若未生成):
      ssh-keygen -t rsa -b 4096
    2. 将公钥复制到远程服务器:
      ssh-copy-id user@remote
    3. 验证免密登录:
      ssh user@remote

高级同步场景与工具

双向同步与冲突解决

  • 工具选择
    • 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定时同步

  • 配置步骤
    1. 编辑Crontab:
      crontab -e
    2. 添加定时任务(例如每小时同步一次):
      0     rsync -av --delete /source/folder /destination/folder >> /var/log/sync.log 2>&1
  • 注意事项
    • 使用绝对路径,避免环境变量干扰。
    • 重定向日志以便排查问题。

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/
0