如果可能的话,如何才能将经过多层压缩的文件(如以下 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”替换为所需的目标文件夹。