2016-12-14 90 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" . ];