Вам нужно запустить 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, который проведет вас через создание такого скрипта.