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