如何在Unix中同时搜索和执行两个脚本?

时间:2018-09-19 12:41:00

标签: shell unix sh aix

假设您有一个包含两个文件的文件夹。

示例:stop_tomcat_center.shstart_tomcat_center.sh

在我的示例中,返回ls *tomcat*返回这两个脚本。 如何同时搜索和执行这两个脚本?

我尝试过

ls *tomcat* | xargs sh

但仅执行第一个脚本(不执行第二个脚本)。

3 个答案:

答案 0 :(得分:2)

一种并行执行多项操作的简单方法是使用 GNU Parallel

parallel ::: ./*tomcat*

或者,如果您的脚本的第一行没有shebang:

parallel bash ::: ./*tomcat*

或者,如果您喜欢xargs

ls *tomcat* | xargs -P 2

答案 1 :(得分:1)

xargs缺少-n 1选项。

来自man xargs

  

-n max-args,--max-args = max-args

     

每个命令行最多使用max-args参数。如果超过了大小(请参阅-s选项),则使用少于max-args参数的参数,除非指定了-x选项,否则xargs将退出。

xargs否则尝试使用尽可能多的参数执行命令,这对大多数命令都有意义。

在您的情况下,ls *tomcat* | xargs sh正在运行sh stop_tomcat_center.sh start_tomcat_center.sh,而stop_tomcat_center.sh可能只是忽略了$1参数。


使用ls的输出也不是一个好主意。更好的方法是使用find -maxdepth 1 -name '*tomcat*' -print0 | xargs -0 -n 1 shfor command in *tomcat*; do sh "$command"; done


此答案是基于这样的假设,即OP在“同时”编写时的意思是“同时具有一个命令行”。

有关并行执行的解决方案,请查看其他答案。

答案 2 :(得分:0)

您可以执行以下搜索和执行

find . -name "*.sh" -exec sh x {} \;

find将找到文件,exec将找到匹配项并执行