「./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ファイルのディレクトリ構造を平坦化したいと思います。
可能ですか?
答え1
考えられる解決策の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
答え2
私に合った代替案を見つけました。私は利点を取っていますサブプロセス7zを押します。 cwd 属性は、子プロセスコマンドの作業ディレクトリを変更します。以下のコードは上記の例を解決します。ここで、「data」はファイルを追加したいパスです。
args = [
'7z',
'a',
filename_7z,
filename,
]
output = subprocess.check_output(args, cwd = 'data').decode("utf-8")