如何用脚本同步两台电脑文件

wen 实用脚本 3

** 告别U盘!手把手教你用脚本实现两台电脑文件实时同步(Windows/Mac/Linux全适用)

如何用脚本同步两台电脑文件


📖 目录导读

  1. 为什么你需要脚本同步? —— 手动拷贝的痛点与脚本方案的硬核优势
  2. 同步前必知的3个核心概念 —— 单向/双向同步、增量备份、冲突解决机制
  3. 实战脚本方案一:rsync + 任务计划(跨平台首选) —— 命令行极客的终极利器
  4. 实战脚本方案二:Python + watchdog(实时监控型) —— 自动化程度拉满的“小白友好”方案
  5. 实战脚本方案三:Syncthing(去中心化同步) —— 无需云服务器,两台电脑直连
  6. 高频问题解答(Q&A) —— 解决你90%的脚本报错与逻辑困惑
  7. 脚本安全与优化建议 —— 日志、加密、断点续传的进阶技巧

为什么你需要脚本同步?

假设你手头有两台电脑:一台办公室台式机,一台家里笔记本,你经常需要把项目文件从A电脑拷贝到B电脑,传统做法是:U盘拷贝(常忘带)、微信/邮件传(大小受限且麻烦)、网盘中转(上传下载慢且有隐私风险)。脚本同步的核心思路是:让电脑自动、定时、增量地完成文件比对与复制,省去人工干预。

核心优势

  • 自动化:设定好规则,开机自启或定时运行,无需每次手动操作。
  • 增量传输:只同步新增或修改过的部分(如rsync的delta算法),速度极快。
  • 可审计:日志记录每一次同步行为,出错可追溯。
  • 跨平台:无论你的两台电脑是何种系统,均有对应脚本方案。

同步前必知的3个核心概念

在写脚本前,你必须明确以下逻辑,否则同步会出现文件覆盖错乱:

  • 单向同步(镜像):A → B,B的内容永远和A一致,B上多出的文件会被删除(或备份),适合“主从”场景(如主力机到备份机)。
  • 双向同步(协调):A ↔ B,任意一边修改,另一边同步更新,两边都一样,适合“双活”场景(如家里和办公室都要改文件)。注意:双向同步必须处理冲突(同一文件两边都改了怎么办)
  • 增量备份:只同步新增/修改的文件,不重复传输已有文件,这是脚本效率的关键,rsyncPython的filecmp模块天然支持。

实战脚本方案一:rsync + 任务计划(跨平台首选)

这是Linux/macOS下最经典方案,Windows可通过Cygwin或WSL运行。核心命令

rsync -avz --delete /本地源路径/ 用户名@远端IP::模块名/目标路径/
  • -a:归档模式(保留权限、时间戳)
  • -v:显示详情
  • -z:传输时压缩
  • --delete:删除源端不存在的文件(保持镜像)

Windows + WSL操作案例

  1. 在Windows上安装WSL(Ubuntu)。
  2. 配置SSH免密登录(ssh-keygen + ssh-copy-id)。
  3. 编写脚本 sync.sh
    #!/bin/bash
    rsync -avz --delete /mnt/c/Users/你的用户名/Desktop/Project/ user@192.168.1.100:/home/user/Project/
  4. 使用Windows“任务计划程序”定时执行该脚本(或开机触发)。

实战脚本方案二:Python + watchdog(实时监控型)

当文件一变,立刻同步——适合对于时效性要求高的场景,Python的watchdog库可以监听文件系统的变动事件。

核心代码逻辑

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import subprocess
class SyncHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if not event.is_directory:
            subprocess.Popen(["rsync", "-av", event.src_path, "user@目标IP:/远端路径/"])
if __name__ == "__main__":
    obs = Observer()
    obs.schedule(SyncHandler(), path="/本地监控目录", recursive=True)
    obs.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        obs.stop()

注意:建议将本地修改动作先延迟2秒再触发rsync,避免文件写入未完成时同步损坏。

实战脚本方案三:Syncthing(去中心化同步)

如果你想免去写脚本的麻烦,或者不想开SSH端口,Syncthing是绝佳选择,它基于Gossip协议,两台电脑安装客户端后,扫描二维码或设备ID即可互连。

脚本化进阶:Syncthing本身有CLI(syncthing cli),你可以在脚本里调用它控制文件夹的暂停/恢复、状态查询,适合需要自己组装逻辑的极客。

高频问题解答(Q&A)

Q1:同步时提示“Permission denied”怎么办? A:检查目标路径的写权限,在Linux下用chmod -R 777chown修改属主;在Windows下需确认共享文件夹有“Everyone”读写权限。

Q2:同步到一半断网了,重新运行会重复传文件吗? A:不会,rsync的增量算法基于文件大小和修改时间(mtime)判断,断点续传需加--partial保留部分传输文件,下次续传。

Q3:双向同步如何避免A和B同时修改了同一文件? A:建议使用版本控制工具(如Git)管理冲突,或者使用Syncthing的“版本控制”功能(自动保留旧版本),若坚持纯脚本,需在同步前先比较哈希值(md5),若两边都与上次的备份不同,则复制为重命名文件。

Q4:两台电脑都在同一个Wi-Fi下,脚本同步速度很慢? A:可能原因:① 用了-z压缩,可以考虑大文件时关闭压缩;② 确保走的是局域网IP而非公网域名;③ 关闭防火墙对TCP端口的拦截。

Q5:我想同步整个用户目录,比如D盘到NAS,脚本怎么写? A:直接指定根路径即可:rsync -av /mnt/d/ user@NAS:/backup/d盘/,注意排除系统临时文件:--exclude '*.tmp' --exclude '.cache'

脚本安全与优化建议

  • 日志必留rsync -av --log-file=/var/log/sync.log,便于排错。
  • 加密传输:若两台电脑不在同一局域网(走公网),必须使用rsync -e "ssh -p 端口号",或采用Syncthing的TLS加密。
  • 避免同步循环:如果在A上监听并同步到B,而B上也运行了同步脚本,会互相触发,给脚本加锁(如端口锁)或只做单向。
  • 测试先行:先在任意目录创建一个测试文件夹,放几个不同的文件,运行脚本观察输出,确认无权限、无路径错误后再正式启用。

💡 总结建议

对于绝大多数用户,推荐“rsync + 任务计划(方案一)”作为主力,它的稳定性和效率远超纯网盘,若你追求实时性且对代码感兴趣,方案二的Python监控脚本值得一试,若你不想折腾复杂网络配置,Syncthing(方案三)开箱即用。

最后的行动指南:先在两台电脑上互建SSH免密,然后写一个仅同步单个文件的测试脚本,跑通后再慢慢扩展到整个目录。脚本的价值在于自动化和可靠,不要追求功能堆砌

打开你的终端,开始创造你的第一个同步脚本吧!如果有任何报错,欢迎在评论区留言,我会挑选典型问题解答。

抱歉,评论功能暂时关闭!