Я пытаюсь найти способ использовать rsync (один или несколько раз) и, возможно, другие команды (например, cp -lr) для выполнения следующих действий:
- Синхронизировать удаленную папку A с локальной папкой B
- У меня уже есть локальная папка C, которая является предыдущей синхронизацией A
- Я хочу, чтобы файлы без изменений между C и A создавались в B как жесткая ссылка
- Я хочу, чтобы новые файлы в A передавались обратно в B
- Я хочу, чтобы файлы, которые были удалены в A, не были жестко связаны в B или жестко связаны, а затем удалены.
- Я хочу, чтобы файлы, которые были изменены (путем добавления данных) в A, скопированы локально из C в B, и чтобы только новые байты передавались и добавлялись в новую копию.
Несколько ограничений, которые я знаю, чтобы быть правдой, могут помочь найти решение:
- В A есть 2 вида файлов:
- Неизменные, которые либо создаются новые, либо удаляются.
- Изменчивые, которые всегда изменяются путем добавления данных, а также могут быть удалены.
- Эти два вида файлов можно легко различить, так как каждая группа имеет фиксированный префикс, поэтому любые команды могут быть нацелены либо на группу, либо на обе.
Мое текущее решение заключается в использовании
rsync -av --link-dest C remote:A B
Но это имеет тот недостаток, что добавленные файлы передаются полностью, увеличивая громкость более чем в 10 раз.
Любые улучшения по сравнению с этим решением приветствуются, и даже лучше, если все передачи выполняются с помощью rsync.
ПРИМЕЧАНИЕ: можно использовать несколько раундов rsync для достижения этого, отсутствие атомарности в этом смысле не является проблемой, пока C не изменяется.