如何使用 rsync 保留删除进行复杂的双向同步

如何使用 rsync 保留删除进行复杂的双向同步

我已经在 stackoverflow 上仔细研究过类似的问题,但它们没有涵盖我想在这里问的情况。

我的所有音乐文件都在远程机器上。我想将它们同步到本地设备。假设我想将它们同步到我的两台笔记本电脑上。最初两台笔记本电脑都没有任何音乐文件。我在两台笔记本电脑上运行一个简单的 rsync 并获取所有音乐文件。

  笔记本电脑 1 [a.mp3,b.wav,c.mp4] {-------\
                                        \----|
                                             | 服务器 [a.mp3,b.wav,c.mp4]
                                        /----|
  笔记本电脑 2 [a.mp3,b.wav,c.mp4] {-------/

现在我想在同步期间保持以下规则。

  • 如果我删除任何一台笔记本电脑上的文件,该文件不应在服务器上被删除。
  • 如果我在任何一台笔记本电脑上删除了一个文件,它不应该被添加回来,因为它没有在服务器上被删除。
  • 如果我删除了其中任何一台笔记本电脑上的文件,其他笔记本电脑上的文件不应该被删除。文件的删除只限于我删除的那台笔记本电脑。
  • 如果我在任何一台笔记本电脑上添加新文件,服务器应该会获得这个新文件。最终,其他每台笔记本电脑都应该获得这个新文件。
  • 如果我删除服务器上的文件,那么所有笔记本电脑上的文件也会被删除。

如何使用 rsync 实现上述规则?我准备在所有设备/笔记本电脑上执行多个命令,以按照上述规则进行同步。

如果我没有表达清楚任何一点,请告诉我。我会修改问题,使其更清楚。

答案1

您必须手动跟踪笔记本电脑上的排除项,然后仅从笔记本电脑运行命令。

因此,如果你在 laptop1 上删除 a.mp3,则将其添加到我们称之为 ~/.music_exclude 的文件中

# this is the file .music_exclude on laptop1
a.mp3

那么将任何添加的歌曲(.music_exclude 中的歌曲除外)同步到服务器:

laptop1$ rsync -azC --exclude-from=~/.music_exclude path/to/music/ user@server:path/to/music/

从服务器获取所有新音乐并处理任何删除:

laptop1$ rsync -azC --exclude-from=~/.music_exclude --delete user@server:path/to/music/ path/to/music/

相关内容