在 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.bz2
或 t.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 文件并提供它