При синхронизации файлов между Linux и MacOS вы могли заметить, что временные метки (например, 2024-05-20 14:30:15.123456) теряют дробную часть после переноса на macOS, превращаясь в 2024-05-20 14:30:15.000000. Это не баг, а особенность работы встроенной версии rsync на Mac.
Если вы используете временные метки для вычисления контрольных сумм или точного отслеживания изменений, такая погрешность может стать проблемой. Давайте разберёмся, почему так происходит и как это исправить.


Обновление rsync на MacOS
В macOS по умолчанию установлена старая версия rsync — 2.6.9, выпущенная ещё в 2006 году. В то время поддержка наносекундных меток (те самые дробные части) не была реализована. Современные Linux-системы используют rsync версии 3.x, где эта функция добавлена.
Кстати, Apple не обновляет rsync из-за лицензионных нюансов: начиная с версии 3, утилита распространяется под лицензией GPLv3, которая конфликтует с политикой компании. Поэтому, чтобы сохранить точность временных меток, вам потребуется установить актуальную версию rsync вручную.
Самый удобный способ — использовать менеджер пакетов Homebrew. Если он у вас не установлен, сделайте следующее:
1. Установите Homebrew. Откройте «Терминал» и введите:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Дождитесь завершения. Если появится запрос на ввод пароля — введите пароль администратора Mac.
2. Установите rsync через Homebrew:
brew install rsync
Это загрузит версию 3.x (на момент написания статьи — 3.2.7).
3. Проверьте путь к новой версии. Введите в терминале:
which rsync
Если вывод показывает /usr/bin/rsync
, значит, система всё ещё использует старую версию. Чтобы переключиться на новую, добавьте путь Homebrew в переменную PATH. Для этого откройте файл настроек оболочки:
nano ~/.zshrc
Добавьте строку:
export PATH="/usr/local/bin:$PATH"
Сохраните изменения (Ctrl+O → Enter), закройте редактор (Ctrl+X) и перезагрузите настройки:
source ~/.zshrc
Теперь команда which rsync
должна показать /usr/local/bin/rsync
.
Дополнительные настройки и советы
После установки убедитесь, что rsync сохраняет метки правильно. Используйте команду с опцией -a
(архивный режим, включает сохранение атрибутов) и -X
(расширенные атрибуты):
rsync -avX /путь/к/файлам/ пользователь@macos:/целевая/папка/
Важные моменты:
- Синхронизация времени между системами. Если часы на Linux и MacOS показывают разное время, метки могут искажаться. Проверьте настройки часовых поясов и синхронизацию через NTP.
- Проверка версий rsync. На Linux выполните
rsync --version
и сравните вывод с результатом на MacOS. Главное, чтобы обе версии были 3.x. - Альтернатива. Если установка Homebrew невозможна, попробуйте скомпилировать rsync вручную из исходников с официального сайта. Но это займёт больше времени и потребует установки Xcode.
После этих действий временные метки будут передаваться без потерь, как на скриншотах выше. Если что-то пошло не так — перезагрузите терминал или проверьте права доступа к файлам (возможно, нужно добавить sudo
перед командами). Буду рад, если вы поделитесь опытом в комментариях!