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

发布于 2024-08-06 18:23:57 字数 579 浏览 11 评论 0原文

我正在使用 Perl 脚本修改 .tar 中的某些文件,并且生成的 .tar 中的目录结构消失。 消除越来越多的代码,我已经做到了重现此问题所需的全部内容是

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

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

我已经浏览了 Archive::Tar 的文档和 src,但我真的不明白发生了什么事。

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

你们中有人以前见过这个或者有什么想法吗?

I'm using a Perl script to modify some files inside a .tar, and the directory structure inside the resulting .tar disappears.
Eliminating more and more code I've come as far as all that's required to reproduce this is

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

Both .tar-files have all the files, however the indication of what directories the files and subdirectories were located in are lost.

I've looked through the docs and src for Archive::Tar but I really don't understand what's going on.

I'm using perl 5.10.0 on win32, tar 1.12 and Archive::Tar 1.54.
I examined the .tar-files in an editor and the data.tar contains dir/ and dir/file.txt, but in the modified_data.tar they show up as dir and file.txt so my original tar seems ok.

Anyone of you that have seen this before or have any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

喵星人汪星人 2024-08-13 18:23:57
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 所指出的,文档说明

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

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

Cannot replicate using data.tar created with:

C:\Temp> tar --version
tar (GNU tar) 1.21

As @~quack notes, the docs state:

Note that GNU tar earlier than version 1.14 does not cope well with the POSIX header prefix. If you use such a version, consider setting the $Archive::Tar::DO_NOT_USE_PREFIX variable to true.

单身情人 2024-08-13 18:23:57

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

I tried your script but could not reproduce the problem (on FreeBSD using Perl 5.10).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文