如何运行 `sh my_dir/subdir*/qsub.sh` 形式的所有脚本

如何运行 `sh my_dir/subdir*/qsub.sh` 形式的所有脚本

我有几个以下形式的目录:

my_dir/subdir*/qsub.sh

我想执行qsub.sh每个子目录中的所有内容,但是当我尝试这样做时

sh my_dir/subdir*/qsub.sh

它似乎只qsub.sh为单个子目录运行。为什么要这样做?

答案1

命令不起作用的原因是 shell 将执行第一个匹配项,其余匹配项将作为参数传递给第一个脚本。

您需要迭代目录并单独运行每个脚本。

例如

for script in my_dir/subdir*/qsub.sh ; do
  sh "${script}"
done

答案2

正如 bxm 已经说过的: shell 正在将您的命令扩展为

sh my_dir/subdirA/qsub.sh my_dir/subdirB/qsub.sh my_dir/subdirC/qsub.sh

my_dir/subdirA/qsub.s与参数一起运行my_dir/subdirB/qsub.sh my_dir/subdirC/qsub.sh

for 循环的替代方案可以是:

find my_dir -name qsub.sh -exec sh '{}' \;

给新手的扩展提示: 使所有脚本可执行(chmod +x)并以适当的 shebang 开始(例如#!/usr/bin/env sh)。然后,您可以通过使其可执行来启用脚本,您还可以使用其他脚本语言,如 python、perl 甚至二进制文件,而无需修改执行逻辑。

然后运行查找:

find my_dir -type f -executable -name qsub.sh -exec '{}' \;

查看人发现用于控制如何处理符号链接或搜索深度的选项。

相关内容