2017-03-08 95 views
1

如果我有以下文件目录你如何执行在多个目录中,一个SHELL脚本,而无需生成运行脚本

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

我有一个shell脚本调用runscript.sh(在所有同级别)执行一些简单的命令。我不想“手动”进入每个目录,然后运行shell脚本。是否有执行上,通过沿线的输入内容,包含名称为“案件”的所有情况下目录的shell脚本的方式:

runscript.sh /case* 

我知道我可以生成另一个脚本,可以做到这一点,但我想知道是否有方法使用简单的命令在多个目录上运行脚本?

您对此的帮助非常感谢!

回答

0

当你想在子目录本身执行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) 

现在将其包装在查找以“case”开头的所有dir命令中。

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

当你对结果满意,填写你的脚本

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

这工作就像一个魅力!谢谢Walter! – user7649922

0

尝试使用for循环。在这个例子中,您需要运行/ home/aero/airplane /中的命令。

for dir in `ls -ad case*`; do runscript.sh $dir/; done 
  • ls -ad case*:只列出开始 “案例” 目录。
+0

这似乎并没有工作。我的runscript.sh调用一个python脚本,该脚本应该修改case目录中的数据文件,但我收到一条错误消息,指出数据文件不存在。数据文件存在于该目录中。我的rundcript.sh没有任何问题,因为如果我将“cd”放入案例目录,然后执行我的脚本,那么一切正常。 – user7649922