【发布时间】:2015-11-25 01:43:09
【问题描述】:
我已阅读有关此主题的类似问题,但没有一个可以帮助我解决以下问题:
我有一个如下所示的 bash 脚本:
#!/bin/bash
for filename in /home/user/Desktop/emak/*.fa; do
mkdir ${filename%.*}
cd ${filename%.*}
mkdir emak
cd ..
done
这个脚本基本上做了以下事情:
- 遍历目录中的所有文件
- 使用每个文件的名称创建一个新目录
- 进入新文件并创建一个名为“emak”的新文件
真正的任务比创建“emak”文件的计算成本高得多......
我有大约数千个文件要遍历。 由于每次迭代都独立于前一次,我会喜欢 将其拆分为不同的处理器(我有 24 个内核),这样我就可以同时处理多个文件。
我阅读了一些关于并行运行(使用:GNU)的先前帖子,但我没有看到在这种情况下应用它的明确方法。
谢谢
【问题讨论】:
-
您自己尝试过使用 GNU 并行吗?很高兴看到这一点。
-
parallel -j $((
getconf _NPROCESSORS_ONLN-1)) -
顺便说一句,通过shellcheck.net 运行您的代码以自动发现引用错误,因此我们无需在此处指出它们。 (如果您的文件名中有空格,则当前代码的行为会很糟糕)。
-
@rai 默认为核心数。 -j-1 == 核心数减一。