直接将 tar 转换为 7z 吗?

直接将 tar 转换为 7z 吗?

我有几个 tarball,它们有很多 GB 大,包含数千个文件,我想知道是否可以将它们转换为更通用的 7z 存档,因为当前的 tarball 使得从其中提取单个文件非常繁琐。如果可能的话,我想就地执行此操作,即无需完全提取 tarball。

我以为我可以使用以下命令来完成此操作,但生成的存档仅包含一个包含所有数据的文件。

tar -xf 100GB.tar -O | 7za a -si -ms=16f32m 100GB.7z

这有可能吗?

答案1

archivemount允许您挂载 tar 档案而不解压它们。然后,您可以压缩所包含的文件,就像它们位于其他任何地方一样。我没用过很多次。我认为它的网站很久以前就瘫痪了,也许不是最好的迹象。

如果你不是在 7z 上,但可以使用类似的压缩工具,最重要的是,它还允许您生成保留所有权限的存档,可以由任何开箱即用的现代 Linux 挂载(即无需安装第三方用户空间文件系统,例如archivemount) :

mksquashfs my_new_compressed_archive.squash  -comp zstd  -tar        < 100GB.tar
#          | target archive name          | |compressor| |read tar|  |read from this file|
#                                           |          \______
#                                           |use -comp lzma   |
#                                           |to use the same  |
#                                           |compressor as 7z.|
#                                           |Usually, zstd is |
#                                           |a good choice, as|
#                                           |it's not as slow |
#                                           |as LZMA/7z at    |
#                                           |reasonable com-  |
#                                           |pression ratios. |
#                                           |Also, unlike LZMA|
#                                           |zstd-compressed  |
#                                           |squashfs can be  |
#                                           |mounted by the   |
#                                           |Linux kernel.    |
#                                           \~~~~~~~~~~~~~~~~~/

然后,即使作为普通用户,您也可以挂载新创建的存档:

udiskctl loop-setup -f my_new_compressed_archive.squash

相关内容