我可以在运行“排序”时删除原始文件吗?

我可以在运行“排序”时删除原始文件吗?

我正在整理一个大约 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,您将获得一个与完成的工作百分比无关的值。但如果碎片少很多,您可以推断出您仍然需要归档。

恐怕您直到最后一段才能知道处理的输出大小。关键点应该在最后一段排序中,此时它将合并刚刚排序的两半。它可以继续创建第一半,然后再创建第二半。或者它可以并行处理这两半。但在第一种情况下,它将占用较少的硬盘空间。所以我想您不能删除该文件。

为了最终解答你的疑问,你应该查看代码下载你的版本某种程度上来自 gnu 或寻找来自 git

相关内容