Похоже, вы ищете не только фиксированный mtime внутри TAR, но и бит -for -бит идентичный tarball, учитывая, что сами файлы идентичны. На самом деле это сложнее, чем кажется.
В зависимости от вашей ситуации не все пункты могут иметь значение, но я перечисляю их здесь для полноты картины. В GNU tar вы можете сделать следующее:
--mtime=
. Начиная с версии 1.29 (в Debian 1.28 -1, вы можете использовать --clamp-mtime
, чтобы установить реальное mtime файла только для файлов /новее/, чем заданное mtime. Это полезно, когда вы хотите дать сгенерированным файлам общую временную метку, но не трогать другие файлы.--sort=name
(GNU tar 1.28 или более позднюю ). Поведение по умолчанию — --sort=none
, при котором файлы хранятся в порядке каталогов. --owner=0 --group=0 --numeric-owner
для установки владельца (, если вы создаете TAR от разных пользователей ). chmod
перед созданием архива или используйте --mode=
, чтобы изменить их, чтобы они были согласованными. В инициативе 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 и справочную страницу для получения информации об отдельных параметрах.
Да :вам определенно нужен модуль "Date ::Simple " где-то .
Пути, которые ищет ваш perl, упоминаются в сообщении об ошибке:
/usr/perl5/5.8.4/lib/i86pc-solaris-64int
/usr/perl5/5.8.4/lib
/usr/perl5/site_perl/5.8.4/i86pc-solaris-64int
/usr/perl5/site_perl/5.8.4
/usr/perl5/site_perl
/usr/perl5/vendor_perl/5.8.4/i86pc-solaris-64int
/usr/perl5/vendor_perl/5.8.4
/usr/perl5/vendor_perl
.
Как упоминал Эндрю , было бы лучше просто не добавлять его в ваш /usr
, что также означает, что вам придется добавить некоторые use lib '/some/path';
в свой сценарий.
Вот несколько способов сделать это:
Установка этого модуля старым (и простым )способом, в собственном локальном каталоге скрипта:
(сначала получите установочный архив модуля с CPAN)
tar -zxvf Date-Simple-3.03.tar.gz
cd Date-Simple-3.03
PREFIX=/your/script/directory perl Makefile.pl
make && make install
затем измените начало вашего скрипта так, чтобы:
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions;
use FindBin;
use lib catfile($FindBin::Bin, 'lib');
...
perlbrewтакже может быть решением, так как это довольно простой способ разместить вашу собственную установку Perl вне системных каталогов (вам может понадобиться немного поискать информацию о Solaris):
Если вы чувствуете себя достаточно комфортно в своей системе /usr
, вы все равно можете использовать системные инструменты perl CPAN для установки этого модуля: