在解压缩文件时删除已解压缩的部分的方法?

时间:2012-12-31 18:14:00

标签: linux bash compression tar bzip2

我想知道是否有一种方法可以删除已解压缩的文件已经解压缩的部分。我有一个压缩文件的外部备份,所以我不担心丢失数据。该文件是bz2。我希望这样做,因为我在驱动器上只有50 GB可用,压缩文件是33 GB。如果我在提取时无法删除部分文件,那么解压缩文件将没有足够的空间。

我还可以采取其他措施来解决这个问题,但我很想知道上面提到的内容是否可行。

3 个答案:

答案 0 :(得分:3)

一般情况下,无法删除文件的初始部分 - 您只能截断文件的尾部。

但是,较新的Linux内核支持在特定文件系统的文件中打孔using the fallocate() system call。有一个corresponding utility可以用于相同的目的,虽然您需要一个相对较新的版本(2.21或更高版本)的util-linux包用于打孔支持,以包含在该实用程序中。

请记住,打孔仍然相对较新且kernel bugs still pop-up - 您可能最好只是清理文件系统以释放空间。

答案 1 :(得分:2)

如果我理解你的话,你想要在读取,解压缩和写入压缩文件之后删除它们的部分。

这通常是不可能的,因为在Unix下没有办法删除文件的初始部分而不重写其余部分(可以截断一个文件而不重写但是没有解决手头的问题)。但是,具有 hole 概念的文件系统可能是一种选择。

但是,也许您可​​以创建较小的压缩文件,例如33个1GB压缩文件。然后很容易删除已经解压缩的文件。

答案 2 :(得分:1)

最明显的解决方案是编写一个处理解压缩输出的过滤器,以查找输出中所需的任何内容。

bunzip2 -c compressedfile.bz2 | yourfilterprogram

-c directs bunzip2 to decompress to stdout

使用此技术,未压缩的文件根本不存储在磁盘上。