Ошибка tar -xvf “Can’t restore time” при попытке извлечения в некоторых каталогах на macOS, но в других работает.

Вопрос или проблема

Странная вещь.

Я скачал релиз openjdk здесь: https://jdk.java.net/16/

При запуске tar -xvf на файле в директории ~/Downloads всё работает нормально.

Но при запуске в /tmp или другой директории в моей домашней папке я получаю ошибку: “Can’t restore time”

Кто-нибудь сталкивался с этим раньше?

Та же проблема в Windows PowerShell, если директория находится на флешке, хотя файлы все равно распаковываются. Просто “дата (и время) изменения” распакованных файлов соответствует времени извлечения, а не остаётся такой же, как до извлечения.

Такой проблемы нет, если директория находится на моем диске C, где установлена Windows.

Ответ или решение

Теория

Ошибка "Can’t restore time" при использовании команды tar -xvf часто связана с недостаточными правами доступа или ограничениями файловой системы на той директории, в которую вы пытаетесь извлечь файлы. Эта проблема обычно возникает когда утилита tar не может восстановить временные метки файлов (дата и время изменения, создания и доступа) после их извлечения из архива. На разных операционных системах и файловых системах могут существовать различия в поддержке временных меток, что также может влиять на возникновение ошибок.

На macOS причиной ошибки может быть, например, ограничение прав пользователя на директориях, таких как /tmp, либо она может быть вызвана настройками монтирования файловой системы, которые не позволяют изменять метаданные файлов. С точки зрения файловой системы, внешние носители, такие как USB-накопители или сетевые диски, часто используют файловые системы, которые не поддерживают полный набор атрибутов POSIX, включая временные атрибуты.

Пример

Рассмотрим ситуацию, когда вы используете команду tar -xvf для извлечения файлов из архива openjdk в директорию ~/Downloads и в директорию /tmp. Первая директория находится внутри вашего домашнего каталога и, как правило, обладает всеми необходимыми правами доступа и поддерживает все метаданные файлов, поэтому извлечение проходит успешно. Однако если вы пытаетесь извлечь архив в /tmp, где права доступа и поддержка временных меток могут быть ограничены, возникает ошибка "Can’t restore time".

Применение

Для решения этой проблемы в macOS можно рассмотреть несколько подходов:

  1. Изменение прав доступа и атрибутов файла:
    Убедитесь, что у вас есть необходимые права для записи в директорию, куда вы хотите произвести извлечение. Используйте команду chmod или chown, чтобы изменить права доступа к директории, если это применимо.
sudo chown -R $USER /tmp
sudo chmod -R 755 /tmp
  1. Использование командных опций tar:
    Если изменение временных атрибутов не критично, вы можете использовать опцию --touch или --no-same-owner, чтобы предотвратить tar от установления временных меток:
tar --no-same-owner -xvf your_archive.tar
  1. Средства автоматизации/Elevation (повышение привилегий):
    Запустите терминал с правами администратора (например, через sudo), чтобы получить временные полномочия на манипуляции с временными метками.
sudo tar -xvf your_archive.tar -C /tmp
  1. Избегание проблем с файловой системой:
    Убедитесь, что целевые директории используют файловые системы с поддержкой необходимых атрибутов. Als, when dealing with external drives, aim to use HFS+ or APFS if you move your files between macOS environments.

Заключение

Ошибки такого рода часто обусловлены особенностями конфигурации файловой системы и прав доступа, поэтому корректное разрешение зависит от комбинации этих факторов. Понимание того, как управление атрибутами файлов работает в вашей операционной системе, и обеспечение соответствия прав пользователя часто являются ключевыми шагами к решению подобных проблем. Эти меры помогут избежать ошибок восстановления времени и обеспечить более гибкую и эффективную работу с архивами tar на различных платформах.

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

Капча загружается...