![如何管理我的音乐库在多个设备上同步?](https://linux22.com/image/1280626/%E5%A6%82%E4%BD%95%E7%AE%A1%E7%90%86%E6%88%91%E7%9A%84%E9%9F%B3%E4%B9%90%E5%BA%93%E5%9C%A8%E5%A4%9A%E4%B8%AA%E8%AE%BE%E5%A4%87%E4%B8%8A%E5%90%8C%E6%AD%A5%EF%BC%9F.png)
我有几台设备(服务器、塔式机、笔记本、安卓手机)。我想让我的音乐库在所有设备上同步。
所以我想到了一个修订控制系统,它只负责处理 CRUD 操作(或者更确切地说是 CRD)。也许它可以使用文件的初始名称来跟踪文件,并跟踪任何重命名或删除。
我所知道的所有流行软件(git、svn、cvs 等)都不行,因为它们节省了太多开销(它们会比较二进制文件)。
流媒体对我来说也不起作用,因为我并不总是有互联网连接。
使用 unison 等工具同步音乐也很低效,因为我将元数据写入文件,因此它们的哈希值、时间戳和大小不断变化。如果有一个比较或同步工具可以忽略大小的细微变化并忽略时间戳和权限等,那也许没问题,但我不知道。
欢迎任何其他有创意且巧妙的解决方案。
答案1
您可以配置 rsync 来执行诸如忽略已存在的文件之类的操作,这将防止您担心的一些元数据更新混乱。不过,您对此的担心可能有些夸大了。如果只有一小部分文件发生了更改,则只有这一部分会被更新;核心 rsync 算法会发现大部分文件是相同的。在此过程中,您需要为读取文件付出一些额外的开销,但也许您可以大多数时候使用“--ignore-existing”,并且只执行较长形式的同步,以不那么频繁地尝试整理所有更改。
我写了一篇文章叫rsync 入门指南试图解释它如何决定要做什么的一些神秘部分。这里有很多选项,你唯一想要的它没有提供的是设置大尺寸差异阈值以触发不同规则集的能力。在我看来,这种情况很少发生,你可以定期计划一次较长的同步会话来处理它。
我也在 git 中维护一些这样的数据。我不确定你为什么如此关心它存储二进制差异的事实。如果你担心这种开销,你应该能够从你的仓库中清除旧信息,然后定期压缩它。git 擅长处理重命名问题,以防止情况变得太糟:如果你只是将某个东西从一个地方移动到另一个地方或更改其名称,如果它确实是同一个文件,git 会弄清楚并且不会保存它的新副本。
答案2
单独复制、更新和删除 - 使用能做好一件事的工具 - 我的意思是是这是 Unix 哲学吧?
我只保留一组标准化的标签和文件,并将它们与“基本”集同步 - 您可以简单地使用 cp -u 或您选择的其他复制工具 - 就我而言,我在 Windows 系统上设置了主文件,然后将文件复制到 USB 驱动器,并使用它来同步其他副本。
如果它们过期了,请删除原始版本或者仅使用 rsync 或 unison。