Bash获取所有目录中具有名称的特定文件并运行脚本
这是我的场景,我有一个名为a的根文件夹,其中包含文件夹B、C、D和n。每个文件夹都有一个bash脚本。如何获取这些bash脚本并使用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/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
:
- 检查文件是否具有执行权限
- 如果未设置用户的执行权限
- 执行脚本
globstar
功能在递归查找东西方面比find
快得多。YMMV+1不管怎样,因为这比嵌入的ls
解决方案优越。@yetanotherposter:另一种解决方案更通用,您可以很容易地在其中容纳非标准目录名。@Rob:对于文件“my_new_line_directory”,这将失败。但是是的,这是最明显的方法:-)我本以为for
循环是最明显的方法。此解决方案似乎实现了服务器上的第一个警告。
find . -name *.sh -type f -exec bash -c '[[ -x {} ]] || chmod u+x {}; {}' \;