Intereting Posts
Как выводить в буфер обмена и вставлять в bash tty? Субдомен Apache не может быть разрешен Правило перезаписи Lighttpd UDP, отправляющий две строки в дейтаграмме Запуск сценария, как только сетевой интерфейс определяется как активный Запуск скрипта каждые 30 минут с помощью crontab с использованием ROOT (Debian) Что это означает, когда символы появляются в подсказке после операции? какая команда unix или linux используется для изменения пароля root удаленной машины (только IP-адрес) без использования SSH Login Приложение для голосового чата в Интернете Linux Mint Debian завершает работу при загрузке Как я могу принудительно удалить пакет из Ubuntu вручную? cp против cat для копирования файла Редактор Nano: удаление до конца файла sudo не работает на моем Centos 7.3 Переместить терминал набранный ввод в новую строку, когда консольное приложение / скрипт отображает выходной текст

Как заставить tar игнорировать последнее изменение файлов / каталогов

Я использую tar для резервного копирования каталога. Некоторые файлы / каталоги с last-modified-time будут обновлены, но содержимое останется. Я хотел бы получить tarball с двоичным файлом, если содержимое файлов каталога не изменяется.

Тем не менее, до тех пор, как обновления last-modified-time , двоичный файл сгенерированного tarball отличается.

Есть ли способ позволить tar игнорировать last-modified-time ? Так что я могу получить один и тот же двоичный файл до тех пор, пока содержимое не будет изменено.

Кажется, что вы ищете не только фиксированное mtime внутри TAR, но и бит-бит для идентичного tarball, учитывая, что сами файлы идентичны. Это на самом деле сложнее, чем кажется.

В зависимости от вашей ситуации не все пункты могут быть релевантными, но я перечисляю их здесь для полноты. В GNU tar вы можете сделать следующее:

  • установите mtime, используя --mtime=<date> . Начиная с версии 1.29 (в Debian 1.28-1 можно использовать --clamp-mtime чтобы установить реальное время m файла только для файлов / новее /, чем заданное время mtime. Это полезно, когда вы хотите предоставить сгенерированные файлы общая временная метка, но оставляйте остальные файлы в покое.
  • Чтобы иметь предсказуемый порядок файлов в архиве, используйте --sort=name (GNU tar 1.28 или новее). По умолчанию используется --sort=none , в котором хранятся файлы в каталоге.
  • --owner=0 --group=0 --numeric-owner для установки владельца (если вы создаете TAR у разных пользователей).
  • разрешения могут быть разными из-за другой umask. Используйте chmod перед созданием архива или используйте --mode=<CHANGES> чтобы изменить их, чтобы они были согласованными.

В инициативе Reproducible Builds есть хорошая статья о создании бит-бит для идентичных архивов .

В статье также приводятся некоторые способы обхода старых версий tar, которые также могут работать с другими реализациями TAR. Обходным способом для mtime является то, что вы можете использовать touch перед созданием TAR, чтобы установить mtime на фиксированное значение для всех файлов, новее, чем определенная дата. Для предсказуемого порядка внутри архива используйте find и sort для передачи упорядоченного списка файлов в TAR.

 find build -print0 | LC_ALL=C sort -z | tar --no-recursion --null -T - -cf product.tar 

Информацию об отдельных параметрах см. В документации GNU TAR и man-странице.