【问题标题】:Execute multiple shell scripts of same name under several sub-directories在多个子目录下执行多个同名的shell脚本
【发布时间】:2021-07-27 00:22:55
【问题描述】:

我正在使用父目录中的 shell 脚本来调用多个其他 shell 脚本,它们都具有相同的名称,但位于不同的子目录下。让我在下面详细说明:

Parent directory: Script deploy_modules.sh
SubDir A: deploy.sh
SubDir B: deploy.sh
SubDir C: deploy.sh
....
SubDir Z: deploy.sh

脚本 deploy_modules.sh 依次调用每个子目录的 deploy.sh,方法是进入该目录,调用脚本,然后退出并进入下一个。

有没有办法在一行命令中顺序执行所有 deploy.sh 文件?我需要该命令足够通用,以自动将任何新添加的子目录包含在另一个 deploy.sh 中,并且在删除一个或多个子目录时不会出错。

【问题讨论】:

  • 为什么它必须在一行中?它只是让人难以阅读。
  • 单行不是硬核要求,我刚才提到的意思是它不应该更长。主要要求是它是通用的,并且能够在添加新目录或删除现有目录时正常执行。
  • 好的,很好。希望我的回答有效。

标签: bash shell deployment


【解决方案1】:

类似

find Parentdir -maxdepth 1 -name deploy.sh -exec {} \;

如果您还想在树的更下方包含部署脚本,请忽略 maxdepth 选项。

如果您需要从它所在的目录中执行部署脚本(尽管您在问题中没有提到这一点),请使用 -execdir 而不是 -exec

【讨论】:

  • did not work 是什么意思? find Parentdir -maxdepth 1 会显示什么?如果您在此处需要帮助,则需要提供更多反馈。 find 应该找到文件;当然,您可能需要调整 -exec 命令以满足您的要求。
  • 这不起作用不是因为您的脚本错误,而是因为在这个特定的用例中,当执行该目录的 deploy.sh 时,shell 实例需要在该目录中。
【解决方案2】:

这将在子目录中找到所有 deploy.sh 脚本到当前目录所在的位置 - 并执行它们。

不做cd下到子目录:

for dep in */deploy.sh; do "$dep"; done

在每个子目录中执行cd

for dep in */deploy.sh; do (cd "$(dirname "$dep")"; ./deploy.sh) done

【讨论】:

  • 我会试试这个。
  • 我尝试了第二个,它成功了。在这个特定用例中,当执行该目录的 deploy.sh 时,shell 实例需要位于该目录中。
  • @AviBis 我明白了,太好了!
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 2013-04-18
  • 2020-09-13
  • 2021-06-03
  • 2020-09-17
相关资源
最近更新 更多