2016-05-31 88 views
2

这是我的场景,我有一个名为A的根文件夹,其中包含具有n种可能性的文件夹B,C,D。这些文件夹中的每一个都有一个bash脚本。我如何获得这些bash脚本并使用bash脚本运行它们。Bash在所有目录中获取具有名称的特定文件并运行脚本

A/B/run.sh 
A/C/run.sh 
A/D/run.sh 
+0

做他们需要的任何参数呢?订单是否重要? – Rob

+0

订单无关紧要,它们不需要任何参数 – yetanotherposter

+1

糟糕,您忘记发布您的代码! StackOverflow是关于帮助人们修复他们的代码。这不是免费的编码服务。任何代码都比没有代码更好。即使你不知道如何编写它,甚至元代码也会演示你如何看待程序应该起作用。 – ghoti

回答

3

容易:)

eval "$(ls A/*/run.sh)" 

LS将返回文件的列表,路径到脚本。 (你可以使用发现过)

的“”周围的$()将确保结果保持新线

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" 
+0

谢谢按预期工作! – yetanotherposter

+0

很高兴我可以帮助.. – Rob

+1

@yetanotherposter:另一种解决方案更一般,你可以很容易地适应非标准的目录名称。 – sjsam

5

随着发现:

find . -name *.sh -type f -exec bash -c '[[ -x {} ]] || chmod u+x {}; {}' \; 

对于每个*.sh发现:

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

这应该是最好的递归解决方案。 :-) – sjsam

+1

我发现bash的'globstar'功能比find更快速地查找事物。因人而异。无论如何我的+1,因为这是优于嵌入式'ls'解决方案。 – ghoti

+0

@ ghoti感谢'globstar'技巧。 – SLePort

相关问题