在Linux上快速连接多个文件

前端之家收集整理的这篇文章主要介绍了在Linux上快速连接多个文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 Python多处理来生成每个进程的临时输出文件.它们可以是几个GB的大小,我做了几十个.这些临时文件需要相互结合以形成所需的输出,这是证明是瓶颈的步骤(和并行杀手).是否有一个Linux工具,将通过修改文件系统元数据而不是实际复制内容来创建并行文件?只要它适用于我可以接受的任何Linux系统.但是文件系统的具体解决方案不会有太大的帮助.

我不是操作系统或CS训练,但在理论上看来,似乎应该可以创建一个新的inode并从我要复制的文件的inode中复制inode指针结构,然后取消链接这些inode.有没有什么实用程序会这样做?鉴于很多思想上的unix实用程序的滥用,我完全期望它是,但找不到任何东西.所以我的这个问题.文件系统在块设备上,实际上是硬盘,以防该信息重要.我没有信心自己写这个,因为我从来没有做过任何系统级编程,所以任何指针(对C / Python代码snipppets)将是非常有帮助的.

解决方法

即使有这样的工具,只有在最后一个文件之外的文件才有效
被保证具有大小是文件系统块的倍数
尺寸.

如果您控制数据如何写入临时文件,并且您知道
每个人将会有多大,您可以做以下操作

>在开始多处理之前,创建最终的输出文件并增长
它到最后的大小
fseek()ing
到最后,这将创造一个
sparse file.
>开始多处理,将每个进程的FD和偏移量递送到其中
文件的特定片段.

这样,进程将协同填充单个输出文件,
消除了以后将它们聚集在一起的需要.

编辑

如果你无法预测单个文件的大小,而是消费者的
最终文件可以使用顺序(而不是随机访问)输入,你可以
Feed cat tmpfile1 .. tmpfileN给消费者,无论是在stdin上

cat tmpfile1 ... tmpfileN | consumer

或通过命名管道(使用bash的Process Substitution):

consumer <(cat tmpfile1 ... tmpfileN)

猜你在找的Linux相关文章