![有没有一种压缩方法,既支持固体压缩,又可以向压缩文件中添加数据?](https://linux22.com/image/81809/%E6%9C%89%E6%B2%A1%E6%9C%89%E4%B8%80%E7%A7%8D%E5%8E%8B%E7%BC%A9%E6%96%B9%E6%B3%95%EF%BC%8C%E6%97%A2%E6%94%AF%E6%8C%81%E5%9B%BA%E4%BD%93%E5%8E%8B%E7%BC%A9%EF%BC%8C%E5%8F%88%E5%8F%AF%E4%BB%A5%E5%90%91%E5%8E%8B%E7%BC%A9%E6%96%87%E4%BB%B6%E4%B8%AD%E6%B7%BB%E5%8A%A0%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
.tar.xz
我有一个包含日志文件的大压缩文件。压缩率非常好 - 但压缩需要很长时间,如果我想向其中添加额外的日志文件,我必须解压它,添加新文件,然后重新压缩它 - 这需要更长的时间并耗尽大量的磁盘空间。
是否有一种存档/压缩方法可以让我有效地将新文件添加到现有存档中,同时仍然保留固体压缩的优点? (即不单独压缩文件,而这正是压缩文件的原因.zip
)。
答案1
无法更新或删除固体压缩中的文件。在固体压缩中,后续数据的压缩取决于先前数据的统计分析(这通常会带来更好的压缩微调输入的统计分析),因此删除文件需要对包含的整个存档进行解压缩和重新压缩文件。
同样重要的是要了解,固体压缩通常用于想要节省磁盘/带宽但不介意压缩或解压缩所需的额外时间以及失去更新或编辑灵活性的情况。还有其他工具可以提供快速压缩/解压缩的能力,包括更新现有存档,但压缩率与固体压缩不同。
您所指的“tar.xz”固体压缩是“模拟”固体压缩”
在计算中,固体压缩是指对多个文件进行数据压缩的方法,其中所有未压缩的文件被连接起来并被视为单个数据块。这样的档案称为实体档案。它本身用于 7z [1] 和 RAR [2] 格式,也间接用于基于 tar 的格式,例如 .tar.gz 和 .tar.bz2。相比之下,ZIP 格式不是固定的,因为它存储单独的压缩文件(尽管可以通过将文件合并到未压缩的 zip 存档中,然后将 zip 存档压缩到第二个压缩的 zip 文件中来模拟小型存档的固定压缩)。
首先让我解释一下您当前使用的 tar.xz 方法的工作原理。
tar
在计算中,tar 是一种计算机软件实用程序,用于将许多文件收集到一个存档文件中,通常称为 tarball
因此 Tar 基本上是一个档案。
xz
xz 是一种无损数据压缩程序和文件格式,其中包含 LZMA/LZMA2 压缩算法。它具有较高的压缩比,但压缩和解压缩时间较慢。
因此,当您将两者结合起来时,您首先归档(tar)多个文件,然后压缩(xz)该单个文件。
现在的问题是如何添加新内容/更新现有的压缩文件。
如果使用 tar.xz,您必须解压缩 tar.xz,这将留下一个 tar 文件,然后您可以使用以下命令附加存档。
tar --append --file=archive.tar file_or_dir_to_add
然后再次将其压缩回来。
xz archive.tar
或者,您也可以使用 ZIP。
zip -g archive.zip folder/file
ZIP 是一种支持无损数据压缩的存档文件格式。 .ZIP 文件可能包含一个或多个已压缩的文件或目录。 .ZIP 文件格式允许使用多种压缩算法,但 DEFLATE 是最常见的。
答案2
是的,可以在压缩文件上添加和删除数据。请参阅以下示例:
fuse-zip
如果您找不到更好的方法,您可以使用以下方法来完成此操作。由于文件夹内容将使用文件内容.zip
。
例如,创建您想要的文件夹/home/user/my_folder
sudo mkdir -v /home/user/my_folder
挂载/home/user/my_folder/zipArchive
(文件将被创建,如果不存在)
fuse-zip foobar.zip /home/user/my_folder/zipArchive
用它。
如果您愿意,请卸载
fusermount -u /home/user/my_folder/zipArchive
有关更多信息,请参阅:
https://linux.die.net/man/1/fuse-zip
您可以使用pe压缩文件系统作为文件。
更多可用于您的案例的示例可以在以下位置找到:如何在 Debian、Ubuntu 和 Linux Mint 上对文件夹进行透明压缩?