并行化多个子文件夹中的 bash 脚本

Parallelize bash scripts from multiple subfolders

提问人:Sergio Bolívar 提问时间:8/15/2023 最后编辑:Sergio Bolívar 更新时间:8/24/2023 访问量:57

问:

我正在尝试并行化放置在各个子文件夹中的多个 bash 文件():script.sh

├── subfolder1
│   ├── subfolder1_script.sh
├── subfolder2
│   ├── subfolder2_script.sh

我试过了:

find . -name "*_script.sh" | parallel '-type f -execdir {} '&' \;'

find . -name "*_script.sh" | parallel ::: -type f -execdir {} '&' \;

但是脚本不起作用。我想要一些关于如何解决这个问题的建议。

谢谢。

Linux bash 循环 并行处理

评论

1赞 Cyrus 8/15/2023
您使用了 .是否需要先切换到脚本功能的目录?-execdir
0赞 Sergio Bolívar 8/15/2023
是的,该函数必须输入每个子文件夹并运行文件sh
0赞 user1934428 8/15/2023
我从未使用过,但根据其手册页,它没有选项。您没有收到错误消息吗?parallel-execdir
0赞 Sergio Bolívar 8/15/2023
不,只是命令不运行。
0赞 Weijun Zhou 8/24/2023
是什么让你相信你可以在管道中分离(或只是任何命令)的选项?find

答:

0赞 Ivan 8/15/2023 #1

试试这样:

for script in *_script.sh; { $script & }
0赞 Ole Tange 8/24/2023 #2
find . -name "*_script.sh" | parallel

这将为每个 CPU 线程并行运行一个。例如,如果您的 CPU 有 16 个线程,它将保持 16 个作业运行,直到全部完成。*_script.sh

Ivan 的解决方案是同时并行运行所有操作。如果没有那么多文件夹,这通常没问题,但如果有 1000 个文件夹,您的计算机会过载。*_script.sh