1

这是系统调用,我现在在 perl 中进行 tar 文件

system("${tarexe} -pcvf $tarname $includepath") which works fine.

$tarexe -> location of my tar.exe file
$tarname -> myMock.tar
$includepath -> ./input/myMockPacketName ./input/myPacket/my2/*.wav ./input/myPacket/my3 ./input/myPacket/in.html 

现在我想使用排除标签排除一些文件,它不排除文件

system("${tarexe} -pcvf $tarname $includepath --exclude $excludepath")

$excludepath -> ./input/myMockPacketName/my3

同样的说法

${tarexe} -pcvf $tarname $includepath --exclude $excludepath  

当我在命令行中运行它时不起作用。

4

3 回答 3

3

我不知道你为什么--exclude不工作。system但是当我看到 a在使用中时,我会给你我最喜欢的 perl 建议。

当然有时它们是必要的,但首先检查是否有 CPAN 模块来代替。在这种情况下,我建议Archive::TarGzip通常我会使用Archive::Tar但我找不到--exclude功能(我只是快速浏览了一下,所以它可能在那里)

于 2010-04-04T00:29:12.673 回答
2

不是对这个问题的直接回答,而是一个提示,可能会帮助您在未来确定这样的问题:

而不是写

system("${tarexe} -pcvf $tarname $includepath --exclude $excludepath")

做类似的事情

my $command = "${tarexe} -pcvf $tarname $includepath --exclude $excludepath"  ;

print "About to run $command\n" ;
system $command ;

然后,您可以将生成的输出剪切并粘贴到新的终端窗口中。或者您可能会发现生成的命令不是您认为的那样。

免责声明- 我同意大多数人已经回答了这个问题,即使用 Perl Tar 模块会更好,但接受这样做可能是有原因的

于 2010-04-04T17:50:54.077 回答
1

@超级明星 -

为了回答您的具体问题,--exclude 可能应该是“./input/myMockPacketName/my3/*”,而不是我记得的 GNU tar 中的“./input/myMockPacketName/my3”。此外,包含的文件名应该在 --exclude 内容之后;应该正确引用

为什么要求告诉您如何做而不是做什么?

除非是家庭作业(在这种情况下,请提前告知)

...或者这些是来自某些公司的通用架构团队的要求(在这种情况下,应该礼貌地教育他们行业标准的最佳实践是尽可能使用 Perl 的本机库而不是系统调用,除非有明确的理由不这样做)...

在除这两种情况之外的所有其他情况下,您应该决定使用哪种方法来实现。

于 2010-04-04T02:58:29.557 回答