Как сохранить дробные части временных меток при копировании файлов с Linux на MacOS

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

Если вы используете временные метки для вычисления контрольных сумм или точного отслеживания изменений, такая погрешность может стать проблемой. Давайте разберёмся, почему так происходит и как это исправить.

Скриншот временных меток на Linux с дробной частью
Скриншот временных меток на MacOS без дробной части

Обновление 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 перед командами). Буду рад, если вы поделитесь опытом в комментариях!

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное