所有文章

如何在 Mac 上让两个文件夹保持同步

· 阅读约 6 分钟

访达无法让两个文件夹保持同步。你可以把一个文件夹拷贝到外置磁盘或 NAS 上一次,但文件变化后,没有任何机制去更新这份拷贝,也不会把你已删除的内容从拷贝中移除。要让两个文件夹保持一致,要么在终端里用 rsync 命令,要么用带同步工具的 App。选择之前,先想清楚你需要哪种同步,因为其中一种会删除文件。

拷贝还是镜像:先做这个决定

单向同步总是从源(你平时工作的文件夹)到目标位置(保存拷贝的磁盘、NAS 或服务器)。有两种方式:

  • 拷贝:新增和修改过的文件会发送到目标位置,那里的内容永远不会被删除。你在源里删掉一个文件,目标位置中的旧拷贝依然保留。用于存档,这是稳妥的选择。
  • 镜像:目标位置变成源的精确副本。你在源里删除的内容,在目标位置也会被删除。拷贝始终整洁,但源中的一次失误(或者源突然变空)会原样扩散到目标位置。

镜像不是备份。如果你在源中删除或损坏了文件,下一次同步会把损坏一并带过去。想找回某个文件昨天的版本,你需要带日期的备份,而不只是同步(文末会讲到)。

系统自带的方法:在终端里用 rsync

macOS 自带 rsync,这是一个只拷贝变化部分的命令行工具。把项目文件夹以拷贝方式同步到已装载的 NAS 共享文件夹,命令如下:

rsync -av ~/Projects/ /Volumes/NAS/Projects/

要改成镜像,加上 --delete。务必先加 --dry-run(或 -n)运行一次,它会列出将要发生的操作,但不改动任何内容:

rsync -av --delete --dry-run ~/Projects/ /Volumes/NAS/Projects/

这样可以用,但有几个坑:

  • 末尾的斜杠有讲究。 ~/Projects/ 拷贝的是文件夹里的内容;~/Projects(不带斜杠)会在目标位置里再建一个 Projects 文件夹。写错了,文件就会放错地方;配合 --delete,还可能删掉你想保留的文件。
  • 没有安全网。 --delete 会直接永久删除,不经过废纸篓,也不询问。如果因为磁盘没有装载或路径写错导致源是空的,镜像会把目标位置清空。
  • 定时运行要自己安排。 想每小时运行一次或在每次更改时运行,就得自己写 launchd 任务或 cron 条目,还要自己查看日志。

如果你熟悉终端,并且每次都先用 --dry-run 检查,rsync 完全够用。如果你想要同样的结果,同时能直观看到设置、并在删除前有检查,就用同步工具。

用 Folia Files 同步两个文件夹

Folia Files 内置了同步工具。它可以在两个文件夹之间单向同步:Mac 上的文件夹、外置磁盘、已装载的 NAS 共享文件夹或服务器,或者通过 rclone 连接的云端。

在 Folia Files 标签页中打开的同步工具:一个已保存的同步每天 20:00 按校验和把“冰岛 2026”文件夹拷贝到 pCloud;左侧列表显示上次运行是在 2 小时前

设置一个同步

  1. 选择工具 › 同步…(⇧⌘Y)。工具会在一个标签页中打开。
  2. 点按新建同步,然后用选取…设定源和目标位置,也可以把文件夹拖到对应的卡片上。
  3. 目标位置类型:磁盘或已装载的共享文件夹选文件夹(磁盘、宗卷、装载点);想不装载云端就把文件发过去,选通过 rclone 连接云端。后者需要另外安装 rclone(例如用 Homebrew)。
  4. 选择模式:拷贝(新增和更改)或镜像(目标完全相同)。再决定目标位置中被移除或替换的项目如何处理:移到废纸篓或永久删除。
  5. 选择比较方式:
    • 大小和日期(快速):文件的大小或修改日期不同,就重新拷贝,和 rsync 的默认行为一样。
    • 内容校验和(精确):大小相同的文件按 SHA-256 校验和比较,只是日期变了的相同文件不会被重新拷贝。校验和会被记住,之后的同步只重新读取有变化的文件。
  6. 选择何时:手动、定期、在指定时间每天,或每当源发生更改时。需要的话,添加用逗号分隔的排除项(node_modules, *.log, .git)。
  7. 点按模拟运行,查看同步将做什么:新增、更新、删除的文件和冲突,以及要传输的数据量。然后点按立即同步。

定时同步和由更改触发的同步,要在你用立即同步手动运行过第一次之后才会开始。它们在 Folia Files 打开期间运行;打开工具里的登录时打开 Folia Files开关,重启后也能继续。每个已保存的同步都会显示在左侧列表中,附带其时间安排和上次运行的时间;绿色对勾表示那次运行一切顺利。

删除之前会发生什么

镜像的风险在于删除,所以 Folia Files 在移除任何内容之前都会先检查:

  • 不会从空的或缺失的源进行镜像。 如果源里没有文件而目标位置有,或者源所在的磁盘没有装载,同步会被阻止。它也会拒绝源和目标位置相互重叠的情况,以及镜像到云端根目录。
  • 你确认实际数量。 手动运行的镜像如果要删除文件,会先询问,并说明文件数量和去向(废纸篓或永久删除),按钮显示为同步并删除。镜像第一次在某个目标位置删除时,对话框会特别说明:源中没有的内容都会被移除,即使那些内容并不是同步放进去的。
  • 定时同步不会自行删除。 如果自动镜像要在你从未确认过删除的目标位置删除文件,或者要移除目标位置一半以上的文件,这次同步会被跳过,并通知你。手动运行一次即可确认。
  • 有内容读不了,就什么都不删。 如果同步过程中源里的某个文件夹无法读取,同步会拷贝能读取的部分,不做任何删除。
  • 目标位置中较新的文件会被保留。 目标位置为文件夹时,在目标位置被修改过(比源中更新)的文件不会被覆盖,而是显示为冲突。

拷贝模式永远不会删除目标位置中的任何内容。

官网版与 Mac App Store 版

Folia Files 有两个版本,同步功能有所不同:

  • 官网版:自带同步工具,目标位置可以是文件夹,也可以是云端。
  • Mac App Store 版:同步属于免费小 App Folia Files Companion 带来的功能。安装并启用 Companion 后才会出现同步工具;没有它,菜单里就没有**同步…**这一项。有了 Companion,可以同步到文件夹,也可以通过 rclone 同步到云端(云端同步在 Companion 中运行,仍需安装 rclone)。

备份(工具 › 备份…)在两个版本中都可用,无需 Companion,可备份到磁盘或 NAS。

同步还是备份?先核对再信任

同步只给你一份最新的拷贝。如果需要文件的早期版本,请用备份:它会在磁盘或 NAS 上保存所选文件夹的带日期拷贝,未改动的文件不额外占用空间。很多人两者都用:用镜像在 NAS 上保留一份工作拷贝,用备份回到过去。

要核对拷贝是否真的与源一致,打开工具 › 比较…,比较这两个文件夹:新增、删除和修改过的文件会并排列出。

比较工具显示两个文件夹之间的差异

如果目标位置是你没有装载的服务器或云端,请参阅如何在 Mac 上不用 macFUSE 连接 SFTP 和 S3。