我正在整理一个大约 400 GB 的大文件。我的磁盘空间快用完了,我必须尽快做点什么。
假设原始文件名为 original_file。因此我将其执行(简化)为“sort original_file | gzip -c > output_file”
我使用 /home/tmp 作为临时目录。据我所知,有很多中间文件,如下所示:
tmpA465
tmpB154
...
等等。
最小的大小为12兆字节。
最大的有~182兆字节。
因此,似乎“sort”命令已经将原始文件分割成小块,并对其进行了排序,现在正在将它们合并为更大的部分(最终也会进行排序)。如果我错了,请纠正我。
我可以立即删除原始文件而不终止排序过程吗?我已经等了好几天了,重要的是“sort”命令不会失败,我最终会得到结果文件。
操作系统是 Ubuntu server 13.04,x64。
谢谢!
答案1
如果你有最新版本的sort
(8.11+),你可以加速带有选项的流程sort --parallel=N
:您将在 N 个核心上共享工作。这确实可以促进您的工作。
sort --parallel=N
对于排序算法,你应该看看UNIX Sort 命令的算法细节.
它使用一些变体Merge
排序:意思是先对整个作品进行分块排序,然后再将排序后的分块合并。您可以在 上找到作品/tmp
。
它读取适合内存的片段。如果你尝试和 找到的所有碎片的大小tmp
,您将获得一个与完成的工作百分比无关的值。但如果碎片少很多,您可以推断出您仍然需要归档。
恐怕您直到最后一段才能知道处理的输出大小。关键点应该在最后一段排序中,此时它将合并刚刚排序的两半。它可以继续创建第一半,然后再创建第二半。或者它可以并行处理这两半。但在第一种情况下,它将占用较少的硬盘空间。所以我想您不能删除该文件。