2016-12-14 91 views
-1

看起来像一个愚蠢的问题,但我无法通过谷歌或手册页找到任何东西......我确定这是用我的引号...当我运行在命令行以下时,它运行如预期的/所需的(即只有文件而没有任何目录):在Perl脚本中压缩无目录的.tar.gz

tar cfz /path/to/file.tar.gz --directory="/path/to/" . 

然而,我在Perl此类似线,尽管(变量作为路径$ folder_errors =” /路径/到'):

system('tar cfz '."\"${folder_errors}\"/errors.tar.gz --directory=\"\"${folder_errors}\"/\" ."); 

还试图

system('tar cfz '."\"${folder_errors}\"/errors.tar.gz --directory=\"${folder_errors}\"/ ."); 

具有相同(意外的)结果。

它压缩正确的文件,但是,压缩文件内部是所有文件所在的文件结构./

+0

这些奇怪的双双引号是怎么回事? – melpomene

+0

@melpomene如果我自称是“引用”知识渊博的人,我会撒谎。我没有删除双打b/c我看到了同样的行为。我真的只是在尝试。我是perl和bash的新手,仍然不清楚报价实现。 – TriHard8

+0

@ikegami我运行了调试器(perl -d)并在该行执行之前检查了该变量。正确的文件位于压缩文件中,该文件也位于所需的目录中。唯一的问题是tarball里面的文件在'。/' – TriHard8

回答

-1

尝试perl的报价操作符。 qq[...]的行为像双引号,除非您不必在其中跳过字面"

system qq[tar cfz "$folder_errors/errors.tar.gz" --directory="$folder_errors"]; 
+0

虽然您的版本更清晰,但它在功能上与OP的第二个非工作代码段相同。 ///它也会遭遇与OP一样的(容易避免的)注入漏洞! – ikegami

+0

谢谢,代码现在更具可读性,但仍遇到与我一样的问题。 – TriHard8

-1

您的报价似乎更正。您是否注意到您正在创建tar.gz文件所在的同一目录中?我认为你正在让自己面临麻烦。如果你不能改变焦油的目标目录,你应该避免递归:

system qq[tar cfz "$folder_errors/errors.tar.gz" --exclude "./errors.tar.gz" --directory="$folder_errors" . ];