我有一个130GB的tar文件需要解压到/ storage。
问题是,我没有足够的磁盘空间来同时存在。 我如何解开tar文件,并确保有足够的磁盘空间,并在untar后立即删除文件?
谢谢。
这个很难。 这真的取决于你有多less可用空间。
其他人说,提取部分文件,并从焦油中删除它们。 这是我现在可以看到的唯一select。
更新tar需要重buildtar,而不需要在同一个驱动器上删除文件。 这就是为什么你必须有2个焦油大小+更多的东西来允许提取文件。
HTH
如果它只是一个tar文件(即不压缩),并且如果在磁盘上留有足够的空间来存储压缩版本的压缩包,则可以尝试压缩这个文件,然后构build一个unzip | tar unzip | tarpipe。 不过,我会事先testing一下。
更简单的解决scheme:获得更大的磁盘。
你可以把tar文件放在不同的服务器上吗? 因为这样,你可以通过ssh解压而不用担心原始文件占用的空间。
总之:痛苦和痛苦…
了解tar使用的文件格式 ,你可以build立一些工具来帮助你正在做的事情,但有一些并发症可能会或可能不会与你的特定文件相关。 tar文件使用512字节的头文件来指定文件的文件名和长度等等。 您可以使用这些信息在每个文件条目的tar文件中build立一系列的偏移量。 然后,您可以做一些事情,例如向后遍历tar文件,并在提取文件时截断文件。
但是,还有一些问题需要处理。 例如,GNU tar可以为具有长文件名的文件创build一些“假”条目,以存储无法放入512字节标题的附加信息。 另外,您可能需要小心目录条目,如果您在内容之前提取目录条目,则可能会指定不允许将文件解压缩到目录中的权限。
Python编程语言,包括一个很好的库来处理tar文件。
但是,另一种select是将大型tar文件分成许多小文件,而不考虑tar格式。 拆分结束,然后截断源文件。 重复,直到130GB的文件,而不是一个130GB的文件。 显然,正确地分割/截断可能有点棘手。 可以使用“dd”和“truncate”命令来完成
那么制作一个脚本就可以很容易地将第一个文件“删除”,删除第一个文件,删除第二个文件,删除第二个文件等等。把这个脚本pipe到“tar x” tar文件中提取的源文件将被删除。
当然,这些都是破坏性的操作,所以你基本上可以做一个正确的操作。
最简单的办法是,如果你有一个地方复制130GB的文件,并从那里提取。 说一个外部USB硬盘驱动器,或另一台机器,并通过SSH隧道解压缩。