我已经在 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/