在 perl 中创建和读取 tar.bz2 文件

Posted

技术标签:

【中文标题】在 perl 中创建和读取 tar.bz2 文件【英文标题】:create and read tar.bz2 files in perl 【发布时间】:2012-11-28 20:23:31 【问题描述】:

我一直在尝试使用

system("tar -jcvf archive_name.tar.bz2 $my_file")

但我得到一个错误

archive_name.tar.bz2:无法打开:没有这样的文件或目录 tar:错误不可恢复:现在退出 tar: Child 返回状态 2

难道不能在 perl 中使用这种方法创建 .tar.bz2 吗?我宁愿不使用模块,但如果绝对必要,我会这样做

【问题讨论】:

它是什么? archive_name.tar.bz2t.tar.bz2? tar cf - my_file | bzip2 > archive_name.tar.bz2 呢? 您是否建议将所有这些都放在 system() 语句中?我可以试试。 *我在粘贴错误消息时编辑了我的错误 谢谢 tar cf - my_file | bzip2 > archive_name.tar.bz2 工作!你知道为什么那会奏效而我的方式不会吗? 我可以推测。您的tar 版本不支持-j 选项?您的 tar 版本是针对不同且不兼容的 bzip2 库编译的? 【参考方案1】:

首先,您不是在Perl 中这样做。您正在生成一个运行该命令的单独进程。

如果您想在 Perl 中执行此操作,则需要使用 Archive::Tar 模块,可能还需要使用 IO::Compress::Bzip2 模块。

首先是看看你是否可以直接从命令行运行这个命令:

$ tar -jcvf archive_name.tar.bz2 $my_file

如果您无法从命令行运行 tar 命令,则不太可能使用 system 命令从 Perl 内部运行它。

你运行命令的方式,将命令和所有参数放在一个字符串中,导致 Perl 从 shell(通常是/bin/sh)运行命令。如果您使用列表中的参数运行命令,Perl 将直接运行该命令而无需 shell:

my $error = system qw( tar -jcvf archive_name.tar.bz2 $my_file );

始终检查系统命令的输出以及$? 的值。 system 命令文档有更多关于处理错误的信息。

【讨论】:

以上是关于在 perl 中创建和读取 tar.bz2 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 azure web 角色的临时文件夹中创建和读取 html 文件并提供它

如何在应用程序包中创建和检查子目录

如何从 Perl 创建或读取 OpenOffice 电子表格?

IAR模板--怎样在IARproject中创建和使用模板

在 Java 中创建和打印格式化文件

如何以编程方式在 Android 中创建和读取 WEP/EAP WiFi 配置?