Почему структура каталогов tarball исчезает, когда я использую Perl Archive::Tar?

Я использую Perl-скрипт для изменения некоторых файлов внутри.tar, и структура каталогов внутри полученного.tar исчезает. Исключая все больше и больше кода, я дошел до того, что все, что требуется, чтобы воспроизвести это

my $data_tar = Archive::Tar->new('data.tar');
$data_tar->write('modified_data.tar');

Оба.tar-файла имеют все файлы, однако указание того, в каких каталогах находились файлы и подкаталоги, потеряно.

Я просмотрел docs и src для Archive:: Tar, но я действительно не понимаю, что происходит.

Я использую perl 5.10.0 на win32, tar 1.12 и Archive::Tar 1.54. Я изучил.tar-файлы в редакторе, и data.tar содержит dir / и dir / file.txt, но в файле modify_data.tar они отображаются как dir и file.txt, поэтому мой оригинальный tar выглядит нормально.

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

2 ответа

Решение
C:\Temp> perl -v

Это Perl, v5.10.1 построен для MSWin32-x86-многопоточность
(с 2 зарегистрированными патчами, смотрите perl -V для более подробной информации)
C: \ Temp> perl -Marchive::Tar -e "print $Archive::Tar::VERSION"
1,52

Невозможно воспроизвести с помощью data.tar создан с:

C:\Temp> tar - версия
tar (GNU tar) 1.21

Как отмечает @~quack, в документации говорится:

Обратите внимание, что GNU tar ранее версии 1.14 плохо справляется с префиксом заголовка POSIX. Если вы используете такую ​​версию, рассмотрите возможность установки $Archive::Tar::DO_NOT_USE_PREFIX переменная к true,

Я попробовал ваш скрипт, но не смог воспроизвести проблему (на FreeBSD с использованием Perl 5.10).

Другие вопросы по тегам