如何在多个目录中执行SHELL脚本而无需生成运行脚本

时间:2017-03-08 21:24:33

标签: shell

如果我有以下文件目录

/home/aero/airplane/case1
/home/aero/airplane/case2
..
/home/aero/airplane/casex (you get the point there could be many cases)

我有一个名为runscript.sh的shell脚本(在所有情况的同一级别)执行一些简单的命令。我不想" cd"手动进入每个目录,然后运行shell脚本。有没有办法在包含名称" case"的所有案例目录上执行shell脚本?通过键入以下行的内容:

runscript.sh /case*

我知道我可以生成另一个可以执行此操作的脚本,但我想知道是否可以使用简单的命令在多个目录上运行脚本?

非常感谢您对此的帮助!

2 个答案:

答案 0 :(得分:1)

如果你想在子目录中执行runscript.sh,你想找到一些避免行的东西

cd case1 && runscript.sh && cd ..
cd case2 && runscript.sh && cd ..

此处,runscript.sh可以返回false,而cd ..可以将您带到错误的位置 您可以通过在子shell中运行所有内容来避免这种情况 使用由pwd替换的runscript.sh脚本进行测试。

(cd case1 && pwd)
(cd case2 && pwd)

现在将其包装在一个命令中,找到所有dir以“case”开头。

find case* -maxdepth 0 -type d -exec bash -c 'cd "{}"; pwd' \;

如果您对结果感到满意,请填写您的脚本

find case* -maxdepth 0 -type d -exec bash -c 'cd "{}"; ../runscript.sh' \;

答案 1 :(得分:0)

尝试使用for循环。在此示例中,您需要从/ home / aero / airplane /运行命令。

for dir in `ls -ad case*`; do runscript.sh $dir/; done
  • ls -ad case*:仅列出以“case”开头的目录。