我想知道是否有一种方法可以在文件解压缩时删除文件的已解压缩部分。我有压缩文件的外部备份,所以我不担心丢失数据。该文件是bz2。我希望这样做,因为驱动器上只有 50 GB 可用空间,压缩文件为 33 GB。如果我在解压时无法删除文件的某些部分,那么解压后的文件将没有足够的空间。
我可以做其他事情来解决这个问题,但我很想知道我上面提到的是否可行。
我想知道是否有一种方法可以在文件解压缩时删除文件的已解压缩部分。我有压缩文件的外部备份,所以我不担心丢失数据。该文件是bz2。我希望这样做,因为驱动器上只有 50 GB 可用空间,压缩文件为 33 GB。如果我在解压时无法删除文件的某些部分,那么解压后的文件将没有足够的空间。
我可以做其他事情来解决这个问题,但我很想知道我上面提到的是否可行。
通常,无法删除文件的初始部分 - 您只能截断文件的尾随部分。
然而,较新的 Linux 内核支持使用系统调用在特定文件系统的文件中打孔。有一个相应的实用程序可以用于相同的目的,尽管您需要一个相对较新的版本(2.21 或更高版本)来支持该实用程序中的打孔支持。fallocate()
util-linux
请记住,打孔仍然相对较新,内核错误仍然会弹出- 您最好只清理文件系统以释放一些空间。
如果我理解正确,您希望在压缩文件开头的部分被读取、解压缩和写入后删除。
这通常是不可能的,因为在 Unix 下,如果不重写文件的其余部分就无法删除文件的初始部分(可以在不重写的情况下从末尾截断文件,但这并不能解决手头的问题)。不过,带有漏洞概念的文件系统可能是一种选择。
但是,也许您可以创建更小的压缩文件,例如 33 个 1GB 的压缩文件。然后很容易删除您已经解压缩的文件。
最明显的解决方案是编写一个过滤器来处理解压缩的输出,在输出中查找您需要的任何内容。
bunzip2 -c compressedfile.bz2 | yourfilterprogram
使用这种技术,未压缩的文件根本不会存储在磁盘上。