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