7z 命令行将文件添加到平面目录 7z 文件

7z 命令行将文件添加到平面目录 7z 文件

我想将文件“./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")

答案3

dr01 的回答通常是正确的,但为什么要使用 7z 来压缩单个文件呢?

我建议你看一下xz或者甚至可能pxz,如果您的发行版上有的话。 xz与 配合得很好tar,较新版本的 tar 有“-J”开关,它可以通过xz

无论如何,您可以使用xz来压缩单个文件,就像使用gzipor一样bzip2

$ xz file.txt

(创建文件file.txt.xz

相关内容