我想将文件“./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”目录。澄清一下,我希望 7z 在添加 x.txt 时能够展平 7z 文件中的目录结构。
这可能吗?
答案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 属性更改子进程命令的工作目录。下面的代码解决了我上面的示例,其中“数据”是我要从中添加文件的路径。
args = [
'7z',
'a',
filename_7z,
filename,
]
output = subprocess.check_output(args, cwd = 'data').decode("utf-8")