如何使用 7-zip 在一个命令中解压多级压缩文件(递归)?

如何使用 7-zip 在一个命令中解压多级压缩文件(递归)?

如果可能的话,如何才能将经过多层压缩的文件(如以下 example.7z 文件)提取到单个文件中?命令? 假设只有一个最终未压缩的文件。

example.7z
    └ database.sql.gz
          └ database.sql

提取此内容的一种方法是在线,就是使用以下内容:

7z e /path/to/example.7z database.sql.gz && 7z e database.sql.gz

但是,这会链接两个命令并且要求我知道每个级别的文件名。

我想知道是否有办法用一个命令

提前致谢! :)

答案1

听起来你指的是管道,就像这个例子一样man 7z

-so    Write data to stdout
       (e.g. 7z x -so directory.tar.7z | tar xf -)

您仍然需要知道要通过管道传输什么命令,但这样可以节省写入任何临时文件的时间。对于您的示例,我认为通过管道传输gunzip然后写入文件应该可行:

7z e -so example.7z database.sql.gz | gunzip > database.sql

  • 仅供参考您可以使用管道执行一些复杂的操作,尤其是在添加tee和过程替换时,请查看info tee示例。

  • 另一个选择是使用不同的存档格式,而不是 7z 或 tar.gz/tar.xz...

    • squashfs文件可以像任何常规文件系统一样挂载和读取,只是它们是只读和压缩的。非常适合浏览和读取大型档案中的一个或两个文件。几乎每个实时 Linux ISO 都使用它来压缩其主文件系统。

答案2

要使用单个命令通过 7-Zip 提取多级压缩文件,您可以使用以下语法:

7z x -r archive.7z -odestination_folder

该命令的具体内容如下:

  • 7z:执行 7-Zip 的命令。
  • x:代表使用完整路径提取。
  • -r:递归处理子目录。
  • archive.7z:您的压缩文件的名称。
  • -odestination_folder:指定应提取内容的目标文件夹。将“destination_folder”替换为要提取文件的实际路径。

例如,如果您的压缩文件名为“example.7z”,并且您想要将其解压到名为“extracted”的文件夹中,则命令为:

7z x -r example.7z -oextracted

确保将“example.7z”替换为压缩文件的实际名称,并将“extracted”替换为所需的目标文件夹。

相关内容