在 Linux 上快速连接多个文件

2024-01-02

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

我没有接受过操作系统或计算机科学方面的培训,但从理论上讲,似乎应该可以创建一个新的索引节点,并从我想要复制的文件的索引节点复制索引节点指针结构,然后取消链接这些索引节点。有没有任何实用程序可以做到这一点?鉴于有太多经过深思熟虑的 unix 实用程序,我完全预料到它会是这样,但找不到任何东西。因此我对SO有疑问。文件系统位于块设备上,实际上是硬盘上,以防此信息很重要。我没有信心自己写这个,因为我以前从未做过任何系统级编程,所以任何指针(指向 C/Python 代码片段)都会非常有帮助。


即使有这样的工具,也只有在除最后一个文件之外的文件 保证其大小是文件系统块的倍数 尺寸。

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

  1. 在开始多重处理之前,创建最终的输出文件并增长 到最终尺寸fseek() http://linux.die.net/man/3/fseek英 到最后,这将创建一个稀疏文件 http://wikipedia.org/wiki/Sparse_file.

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

这样,进程将协作填充单个输出文件, 无需稍后将它们放在一起。

EDIT

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

cat tmpfile1 ... tmpfileN | consumer

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

consumer <(cat tmpfile1 ... tmpfileN)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Linux 上快速连接多个文件 的相关文章

  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 使用远程管理凭据将文件复制到远程计算机

    我正在使用 C 我需要能够将一组文件复制到大约 500 台不同的计算机上 我已成功地使用 LogonUser 方法来模拟具有复制文件所需权限的域帐户 文件的目标路径类似于 远程计算机 C SomeFolder 我的问题是 有没有办法做到这一
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a

随机推荐

  • 在多个转换中保持键控状态

    我有一个流 我想使用某个键对其进行分区 然后运行多个转换 每个转换使用一个状态 当我打电话时keyBy 我得到一个KeyedStream下一个转换可以正确访问分区状态 但之后链接的另一个转换在尝试访问分区状态时会出现异常 例外的是 状态密钥
  • 如何针对集合调用 Expression>

    我有一个从存储库模式定义存储库的接口 interface IRepository List
  • dplyr 根据向量中的名称改变多列

    我想使用以下方法将两列相乘dplyr s mutate功能 但是我不想为每个变异条件编写一个新行 而是想使用存储在向量中的列的名称var1 and var2 例如 最后我想在现有的bankdata与名字result1其中包含现金列和贷款列相
  • Flash Builder 4.6 - 代码隐藏方法

    我正在尝试找出使用 Flash 构建器用于移动应用程序的 代码隐藏 的正确方法 我正在创建一个 Flex 移动 AIR 项目 基于 选项卡式视图 模板 将我的 UI 设置为设计模式 现在我希望所有逻辑都位于一个单独的类中 该类将相应地改变
  • 我可以假设 C stdlib 函数不使用 errno 吗?

    我正在看一段 C 代码 它的意思是 void printerror char message printf There was an error s n message switch errno do stuff depending on
  • 使用 SolrJ 和 Solr4 进行分面

    我已经浏览过该网站上的相关问题 但尚未找到相关的解决方案 使用以下形式的 HTTP 请求查询我的 Solr4 索引时 facet true facet field country 响应包含所有不同的国家以及每个国家的计数 如何使用 Solr
  • 调试期间未命断点

    为什么 NetBeans Android 1 5 中的断点无法触发 你有一个叫做在其他 IDE 中开发 http developer android com guide developing other ide html它告诉你如何在 ec
  • 在 Linux 上哪里安装 GlassFish?

    免责声明 我对 Linux 还比较陌生 我争论过将其放在 SuperUser 或 ServerFault 上 因为答案does需要将 Linux 作为一个系统进行解释 而不是特定的编程问题 但是我从 Java 开发人员的角度对此感兴趣 并且
  • 如何在 Node.js 中设置 http.createClient 的超时?

    有一个帖子 如何在node js中设置客户端http连接的超时 https stackoverflow com questions 3586760 how do i set a timeout for client http connect
  • 如何获取组中对象的画布相对位置?

    通常一个对象相对于画布的位置可以从它的 left and top属性 但如果对象位于选择 组中 则这些属性将与组相关 有没有办法获得它们相对于画布的位置 当对象位于组内时 其相对于画布的坐标将取决于组的原点 以及对象的原点 假设我们有这段代
  • 使用云台信标设备进行室内定位如何提高数据的稳定性和准确性?

    在android中如何提高多个信标检测的稳定性 我正在使用Gimbal信标进行室内定位 蓝色是否适合室内位置数据访问 我在这方面进行了广泛的研究 因为我在充满会议室的走廊中放置了信标 所有会议室都在附近 首先 我建议将信标放置在天花板上 信
  • 如何在sbt中将jar打包到给定目录?

    在 sbt 中 如果我们执行package 将会生成一个jar文件target scala 2 12 XXX jar 但我想把jar文件放在myDirectory XXX jar 我怎样才能做到这一点 The target 默认路径的一部分
  • 使用 maven-shade-plugin 时出现多余的警告

    我在用Maven 阴影插件对于一个简单的 Maven 项目 该插件成功地将所有依赖项包含到最终的 阴影 jar 中 这个过程每次都很顺利 并且生产出的正是我所需要的 当运行 第一次 时 经过一段时间后clean 该插件很安静并且产生很少的输
  • 如何卸载 Laravel Passport

    我决定使用 JWT 并从项目中完全删除 Laravel Passport 我试图从composer remove laravel passport 然而 这并没有什么好处 Symfony Component Debug Exception
  • Javascript:我需要为对象中的每个变量放置 this.var 吗?

    在我最熟悉的 C 语言中 通常声明一个对象如下 class foo public int bar int getBar return bar Calling getBar 工作正常 忽略这一事实bar可能未初始化 变量bar within
  • Hadoop 中的重新分区

    我的问题主要是理论上的 但我有一些表已经遵循某种分区方案 可以说我的表是按天分区的 但在使用数据一段时间后 我们想修改为月份分区 我可以轻松地重新创建具有新分区定义的表并重新插入数据 这是最好的方法吗 当数据很大时听起来很慢 我看到 hiv
  • CakePHP 2 $this->Html->脚本顺序

    我试图将 JS 文件插入到视图中 但它们插入的顺序错误 在我的 default ctp 中我有这个 this gt Html gt script array https ajax googleapis com ajax libs jquer
  • MySQL 连接、分组依据、排序依据

    我有一个产品表 CREATE TABLE products id INT 以及这些产品的图片表 CREATE TABLE images id INT product id INT default TINYINT 1 我需要选择所有产品 并加
  • javafx如何使用复选框获取表视图中选定的行数据

    在这个项目中 我无法在控制台输出中获取复选框数据是否被选中 My code import java util Arrays import java util Iterator import java util List import jav
  • 在 Linux 上快速连接多个文件

    我正在使用 Python 多重处理为每个进程生成一个临时输出文件 它们的大小可能有几 GB 我制作了几十个 这些临时文件需要连接起来才能形成所需的输出 而这一步被证明是瓶颈 也是并行杀手 是否有一个 Linux 工具可以通过修改文件系统元数