gpt4 book ai didi

linux - 在 Linux 上快速连接多个文件

转载 作者:IT王子 更新时间:2023-10-28 23:52:54 25 4
gpt4 key购买 nike

我正在使用 Python 多处理为每个进程生成一个临时输出文件。它们的大小可能有几 GB,而我制作了几十个。这些临时文件需要连接起来以形成所需的输出,而这一步被证明是瓶颈(也是并行 killer )。是否有一个 Linux 工具可以通过修改文件系统元数据而不是实际复制内容来创建连接文件?只要它可以在我可以接受的任何 Linux 系统上运行。但是文件系统特定的解决方案不会有太大帮助。

我没有接受过 OS 或 CS 培训,但理论上似乎应该可以创建一个新的 inode 并从我要复制的文件的 inode 复制 inode 指针结构,然后取消链接这些 inode。是否有任何实用程序可以执行此操作?鉴于经过深思熟虑的 unix 实用程序过多,我完全期望它是,但找不到任何东西。因此我的问题是。文件系统位于 block 设备上,实际上是硬盘,以防此信息很重要。我没有信心自己写这个,因为我以前从未做过任何系统级编程,所以任何指针(指向 C/Python 代码片段)都会非常有帮助。

最佳答案

即使有这样的工具,也只能在除最后一个文件之外的文件时才有效保证大小是文件系统 block 的倍数大小。

如果您控制数据写入临时文件的方式,并且您知道每个有多大,您可以改为执行以下操作

  1. 在开始多处理之前,创建最终的输出文件,并增长它到最终大小 fseek()荷兰国际集团到最后,这将创建一个 sparse file .

  2. 开始多处理,将 FD 和偏移量传递给每个进程文件的特定片段。

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

编辑

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

cat tmpfile1 ... tmpfileN | consumer

或通过命名管道(使用 bash 的进程替换):

consumer <(cat tmpfile1 ... tmpfileN)

关于linux - 在 Linux 上快速连接多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com