0

我一直在尝试使用

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

但我得到一个错误

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

在 perl 中使用此方法无法创建 .tar.bz2 吗?我宁愿不使用模块,但如果绝对必要,我会

4

1 回答 1

1

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

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

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

$ tar -jcvf archive_name.tar.bz2 $my_file

如果您不能从命令行运行 tar 命令,那么在 Perl 中使用该system命令就不太可能运行它。

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

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

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

于 2012-11-29T04:35:49.687 回答