当我使用Perl的Archive :: Tar时,为什么tarball目录结构会消失?

时间:2009-10-09 15:22:24

标签: perl tar archive-tar

我正在使用Perl脚本修改.tar中的某些文件,并且生成的.tar中的目录结构消失了。 消除越来越多的代码我已经到了重现这一点所需要的所有代码

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

两个.tar文件都包含所有文件,但是文件和子目录所在目录的指示都会丢失。

我查看了Archive::Tar的文档和src,但我真的不明白发生了什么。

我在win32上使用perl 5.10.0,tar 1.12和Archive :: Tar 1.54。 我在编辑器中检查了.tar文件,data.tar包含dir /和dir / file.txt,但是在modified_data.tar中它们显示为dir和file.txt,所以我的原始tar似乎没问题。

你们之前见过这个或有任何想法的人吗?

2 个答案:

答案 0 :(得分:3)

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所说,docs state

  

请注意,早于1.14版本的GNU tar无法很好地处理POSIX标头前缀。如果您使用此类版本,请考虑将$Archive::Tar::DO_NOT_USE_PREFIX变量设置为true

答案 1 :(得分:0)

我尝试过你的脚本,但无法重现问题(使用Perl 5.10在FreeBSD上)。