Bash获取所有目录中具有名称的特定文件并运行脚本

Bash获取所有目录中具有名称的特定文件并运行脚本,bash,Bash,这是我的场景,我有一个名为a的根文件夹,其中包含文件夹B、C、D和n。每个文件夹都有一个bash脚本。如何获取这些bash脚本并使用bash脚本运行它们 A/B/run.sh A/C/run.sh A/D/run.sh 简单:) ls将返回一个包含脚本路径的文件列表。(你也可以用find) $()周围的“”将确保结果保留新行 eval将以脚本的形式执行返回的行 请注意,如果脚本和其他东西的名称中有空格,这可能是一个脆弱的解决方案。但如果它看起来像你所展示的那样,那应该很好 这是一个示例的输出:

这是我的场景,我有一个名为a的根文件夹,其中包含文件夹B、C、D和n。每个文件夹都有一个bash脚本。如何获取这些bash脚本并使用bash脚本运行它们

A/B/run.sh
A/C/run.sh
A/D/run.sh
简单:)

ls将返回一个包含脚本路径的文件列表。(你也可以用find)

$()周围的“”将确保结果保留新行

eval将以脚本的形式执行返回的行

请注意,如果脚本和其他东西的名称中有空格,这可能是一个脆弱的解决方案。但如果它看起来像你所展示的那样,那应该很好

这是一个示例的输出:

 ~/ eval "$(ls */run.sh)"
 I am running and my name is: one/run.sh
 I am running and my name is: two/run.sh
run.sh脚本包括:

 echo "I am running and my name is: $0"
使用查找:

find . -name *.sh -type f -exec bash -c '[[ -x {} ]] || chmod u+x {}; {}' \;
对于找到的每个
*.sh

  • 检查文件是否具有执行权限
  • 如果未设置用户的执行权限
  • 执行脚本

他们需要任何参数吗?顺序重要吗?顺序不重要,它们不需要任何参数。还有,你忘了发布代码了!StackOverflow是关于帮助人们修复代码的。这不是免费的编码服务。有代码总比没有代码好。即使你不知道如何编写程序,元代码也会证明你认为程序应该如何工作。谢谢你提醒我下次我会这么做,是的,我甚至不知道从哪里开始,因为我还没有任何代码,正在努力开始。这应该是最好的递归解决方案。:-)我发现bash的
globstar
功能在递归查找东西方面比
find
快得多。YMMV+1不管怎样,因为这比嵌入的
ls
解决方案优越。@yetanotherposter:另一种解决方案更通用,您可以很容易地在其中容纳非标准目录名。@Rob:对于文件“my_new_line_directory”,这将失败。但是是的,这是最明显的方法:-)我本以为
for
循环是最明显的方法。此解决方案似乎实现了服务器上的第一个警告。
find . -name *.sh -type f -exec bash -c '[[ -x {} ]] || chmod u+x {}; {}' \;