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

StackOverflow https://stackoverflow.com/questions/1544468

  •  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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top