2016-12-14 8 views
-1

愚かな質問のようですが、私はグーグルやマニュアルページから何も見つけることができません...私は引用符で囲まれたものだと確信しています...コマンドラインから次の予想通り、それは希望/実行されます(任意のディレクトリなしすなわちファイルのみ):Perlスクリプトのディレクトリを除いて.tar.gzを圧縮

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

は、しかし、私はパス($ folder_errors =」などの変数とはいえ、Perlでこの類似ラインを持っています/パス/ 'へ):

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

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

同じ(予期しない)結果があります。

正しいファイルを圧縮しますが、圧縮されたファイルの内部には、すべてのファイルが存在するファイル構造./があります。

+0

これらの奇妙な二重引用符は何ですか? – melpomene

+0

@melpomene私が知っている "引用"であると主張するなら、私は横たわっているだろう。私はダブルスを削除しました。私は同じ行動を見ました。私は本当に物事を試みていた。私は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の2番目の正常でないスニペットと同じです。 ///それはまたOPと同じ(簡単に回避された)注入バグに苦しんでいます! – ikegami

+0

ありがとうございます。コードは読みやすくなりましたが、今までと同じ問題を抱えています。 – TriHard8

-1

見積もりが正しいようです。アーカイブするファイルがあるディレクトリと同じディレクトリにtar.gzを作成していることに気付きましたか?私はあなたがトラブルにさらされていると思います。 tarのターゲットディレクトリを変更できない場合、再帰を避ける必要があります。

system qq[tar cfz "$folder_errors/errors.tar.gz" --exclude "./errors.tar.gz" --directory="$folder_errors" . ]; 
関連する問題