Почему структура каталогов tarball исчезает, когда я использую Perl Archive::Tar?
-
20-09-2019 - |
Вопрос
Я использую Perl-скрипт для изменения некоторых файлов внутри .tar, и структура каталогов внутри результирующего .tar исчезает.Устраняя все больше и больше кода, я дошел до того, что все, что требуется для воспроизведения этого, - это
my $data_tar = Archive::Tar->new('data.tar');
$data_tar->write('modified_data.tar');
Оба tar-файла содержат все файлы, однако указание на то, в каких каталогах находились файлы и подкаталоги, теряется.
Я просмотрел документы и src для Архив::Tar но я действительно не понимаю, что происходит.
Я использую perl 5.10.0 для win32, tar 1.12 и Archive::Tar 1.54.Я проверил .tar-файлы в редакторе, и data.tar содержит dir / и dir/file.txt , но в modified_data.tar они отображаются как dir и file.txt так что мой исходный tar кажется нормальным.
Кто-нибудь из вас видел это раньше или у кого есть какие-нибудь идеи?
Решение
C:\Temp> perl -v This is perl, v5.10.1 built for MSWin32-x86-multi-thread (with 2 registered patches, see perl -V for more detail)
C:\Temp> perl -MArchive::Tar -e "print $Archive::Tar::VERSION" 1.52
Не удается выполнить репликацию с помощью data.tar
созданный с помощью:
C:\Temp> tar --version tar (GNU tar) 1.21
Как отмечает @~quack, в состояние документов:
Обратите внимание, что GNU tar более ранней версии, чем 1.14, плохо справляется с префиксом заголовка POSIX.Если вы используете такую версию, рассмотрите возможность установки
$Archive::Tar::DO_NOT_USE_PREFIX
переменная дляtrue
.
Другие советы
Я попробовал ваш скрипт, но не смог воспроизвести проблему (на FreeBSD с использованием Perl 5.10).