2017-11-08 16 views
1

テキストファイルに格納されたファイルのリストからtarファイルを作成しようとしていますが、tarを作成する作業コードがありますが、ディレクトリ(appとすべてのサブディレクトリ)を削除し、親ディレクトリを削除します。これは、特定のディレクトリからのみファイルを開くソフトウェアによるものです。Pythonのtar.addファイルですが親ディレクトリは省略します

package.listファイルは以下の通りです:

app\myFile app\myDir\myFile app\myDir\myFile2

私はrestore.addでパスを省略した場合、それが原因別の場所から実行している私のプログラムにファイルを見つけることができません。どのように特定のディレクトリから開始するか、ファイルを追加するが、テキストファイルから取得したディレクトリ構造を維持するように指示するにはどうすればいいですか?appすべての親ディレクトリではない

私の目的はこれですtar cf restore.tar -T package.listがWindows上のPythonを使用しています。

私はbasenameをここから試しました:How to compress a tar file in a tar.gz without directory?、これはすべてのディレクトリを削除します。

私もしかし、これはディレクトリ構造を破壊することによっていくつかの奇妙な結果が得られるとPython 2.7

答えて

1

することができますを使用してapp

path = foo + '\\' + bar 
file = open(path + '\\package.list', 'r') 
restore = tarfile.open(path + '\\restore.tar', 'w') 
for line in file: 
    restore.add(path + '\\' + line.strip()) 
restore.close() 
file.close() 

にファイルの負荷をリネームし、.add方法でarcname='app'を使用して試してみましたTarFile.addに2番目の引数を使用すると、アーカイブ内にその名前が指定されました。

だから、すべてのパスは、このようなまともな何かがうまくいくと仮定:

import tarfile 
prefix = "some_dir/" 
archive_path = "inside_dir/file.txt" 
with tarfile.open("test.tar", "w") as tar: 
    tar.add(prefix+archive_path, archive_path) 

は使用法:製造において

> cat some_dir/inside_dir/file.txt 
test 
> python2 test_tar.py 
> tar --list -f ./test.tar 
inside_dir/file.txt 

、私はすべてのことを確認するために扱うパスに適切なモジュールを使用することをお勧めしますスラッシュとバックスラッシュが正しい場所にあります。

+0

ありがとうございました!一度私は他のコードのためにそれをわずかに微調整してうまくいきました。投稿する前にTarFile.addメソッドを見たことがありましたが、2番目の引数を追加することはできませんでした。 – Teracan

関連する問題