在后台执行 shell 并使用 find gun

execute shell with find gun at background

我在同一目录中有一组 shell,我想执行所有开头有结果的 shell,如:

result.sha
result.shb
result.shc
...

下面的脚本可以找到执行所有具有匹配 reg 的 shell,但是我怎样才能让它们中的每一个 运行 在后台并行

find . -type f -name 'result.*' -exec sh {} \;

我已经尝试过了,但它不起作用:

find . -type f -name 'result.*' -exec sh {} \;&

我认为您的解决方案在后台运行查找程序,而不是在后台执行每个 shell 脚本。我自己尝试使用 find 实用程序,但无法使其正常工作。但是,以下 shell 脚本将执行您的要求。

#!/bin/bash
for prog in result.*
do
    sh $prog &
done
exit 0

或 1 行的等效指令

每批 find 结果仅启动 sh 一次,并让它根据需要分叉出尽可能多的子进程,效率更高。

find . -type f -name 'result.*' -exec sh -c 'for arg do . "$arg" & done' _ {} +

. "$arg" & 分叉出 already-running 解释器的副本并在其中运行 "$arg" 中的代码,避免额外支付解释器启动成本。