ファイル「./data/x.txt」をパス「./data/x.7z」に圧縮したいと思います。
走っているとき
7z a ./data/x.txt.7z ./data/x.txt
ファイル "./data/x.txt"は保持します
data/x.txt
ただ(私が欲しいもの)とは対照的に
x.txt
ただし、7zではx.7zファイル内のパス「./data」ディレクトリを無視したいと思います。明確にするために、x.txtを追加するときに、7zで7zファイルのディレクトリ構造をフラット化する必要があります。
これは可能ですか?
私のために働く代替案を考え出した。 subprocess を利用して7zを呼び出しています。 cwd属性は、サブプロセスコマンドの作業ディレクトリを変更します。以下のコードは、上記の例を解決します。ここで、「data」はファイルを追加するパスです。
args = [
'7z',
'a',
filename_7z,
filename,
]
output = subprocess.check_output(args, cwd = 'data').decode("utf-8")
考えられる解決策の1つは、圧縮する前にディレクトリにchdirすることです。例えば:
$ cd data; 7z a ../test.7z *
$ 7z l ../test.7z
...
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2011-02-18 15:29:53 ....A 6 11 x.txt
------------------- ----- ------------ ------------ ------------------------
...
さらに別の方法は、別のアーカイバを使用することです。 rar
。便利なコマンドラインスイッチがたくさんあります。あなたの問題は-ep/-ep1
オプションで解決することができます:
$ rar a -ep test.rar data
または
$ rar a -ep1 test.rar data
rar
ヘルプの一部:
ep Exclude paths from names
ep1 Exclude base directory from names