并行处理多个文件的 bash 脚本

标签 bash parallel-processing

我读过关于这个主题的类似问题,但没有一个能帮助我解决以下问题:

我有一个如下所示的 bash 脚本:

#!/bin/bash

for filename  in /home/user/Desktop/emak/*.fa; do
    mkdir ${filename%.*}
    cd ${filename%.*}
    mkdir emak
    cd ..
done

此脚本主要执行以下操作:

  • 遍历目录中的所有文件
  • 使用每个文件的名称创建一个新目录
  • 进入新文件并创建一个名为“emak”的新文件

真正的任务做一些比创建“emak”文件更昂贵的计算......

我有大约数千个文件要遍历。 由于每次迭代都独立于前一次,我会喜欢 将它拆分到不同的处理器(我有 24 个内核),这样我就可以同时处理多个文件。

我之前读过一些关于并行运行的帖子(使用:GNU),但我没有看到在这种情况下应用它的明确方法。

谢谢

最佳答案

不需要并行;你可以简单地使用

N=10
for filename in /home/user/Desktop/emak/*.fa; do
    mkdir -p "${filename%.*}/emak" &
    (( ++count % N == 0)) && wait
done

第二行暂停每第 N 个作业,以允许所有先前的作业在继续之前完成。

关于并行处理多个文件的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896949/

相关文章:

linux - 语法错误,意外标记......这是什么原因造成的?

linux - 有没有办法在 bash 中执行 Linux ifup 或 ifdown 而不必总是先输入 sudo?

linux - 使用区分大小写的名称重命名文件夹

python - 如何在 bash 中使用解析 nvidia-smi 输出并将解析结果用作其他命令的输入?

Java多线程 vector 加法

c++ - 使用 OpenMP 与 Affinity 调度进行软件并行化?

c# - 使用 ConcurrentBag 的并行 ForEach 未按预期工作

c# - 使用并行任务时x86和x64的数据类型有什么区别

r - 根据先前的结果并行化 for 循环

c - 将参数传递到 ./configure