Вам потрібно запустити rsync
двічі, і я рекомендую запускати його за допомогою -au
:
rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source
-a
(a для архіву) - це ярлик для -rlptgoD
:
-r
Зверніться до підкаталогів
-l
Також синхронізуйте символічні посилання
-p
Також синхронізуйте дозволи файлів
-t
Також синхронізуйте час модифікації файлу
-g
Також синхронізуйте групи файлів
-o
Також синхронізувати власника файлу
-D
Також синхронізуйте спеціальні (не звичайні / мета) файли
В основному, коли ви хочете створити ідентичну індивідуальну копію за допомогою rsync
, ви завжди повинні використовувати, -a
оскільки саме це очікується більшістю користувачів, коли вони говорять про " синхронізацію ". Інші відповіді тут, мабуть, не помічають, що інколи вміст файлу залишається незмінним, але його власник може змінитися або змінилися дозволи на доступ, і в такому випадку rsync
не буде синхронізовано файл, який може бути фатальним.
Але вам також потрібно, -u
оскільки це говорить, rsync
щоб повністю залишити будь-який файл / папку в спокої, якщо він уже існує в пункті призначення та має останню дату останньої модифікації. Без -u
rsync
синхронізації, незалежно від того, файл чи папка новіший чи ні .
Зверніть увагу, що це рішення не може обробляти видалені файли. Обробляти видалення непросто, оскільки враховуйте наступну ситуацію: файл видалено у джерелі, тепер як rsync
дізнатись, чи колись цей файл існував і був видалений (у такому випадку його також потрібно видалити в пункті призначення), він ніколи не існував у джерела (у такому випадку його потрібно скопіювати з пункту призначення). Ці дві ситуації виглядають ідентично, rsync
тому він не може знати, як правильно реагувати. Це не допоможе синхронізувати навпаки, оскільки це може призвести до тієї ж ситуації: файл існує у джерелі, але не в місці призначення. Чому? Він ніколи не існував у пункті призначення або його видаляли? Обидва випадки виглядають ідентично rsync
.
Засоби синхронізації, які можуть надійно синхронізувати видалені файли, зазвичай керують журналом синхронізації про всі минулі операції синхронізації. Якщо цей журнал виявляє, що колись був файл, який синхронізувався, але зараз його немає, очевидно, що його було видалено. Якщо відповідно до журналу такого файлу ніколи не було, його потрібно синхронізувати. Зберігаючи всі записи журналу з позначками часу, навіть можливо, що видалений файл повертається і видаляється кілька разів, але інструмент синхронізації завжди буде знати, що робити, і результат завжди правильний. rsync
не має такого журналу, він покладається лише на поточний стан файлу двох сторін операції.
Однак ви можете створити собі команду синхронізації, використовуючи rsync
і трохи сценарію оболонки POSIX, який вже дуже наближається до інструменту синхронізації, як описано вище. Оскільки я сам потребував такого інструменту, ось відповідь на Stackoverflow, яка проведе вас через створення такого сценарію.