我有几个 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