将CD放入名称相似的多个目录中,在每个目录中执行命令命令,退出并在下一个目录中重复

时间:2019-07-02 09:26:38

标签: bash

大家好,谢谢您的宝贵时间。我对bash脚本非常陌生,因此我一点也不知道如何解决此问题。我有一个包含很多子目录的目录,例如:

test-01
test-02
test-03
test-04
test-05
and so on..

我想知道有人能一次向我展示如何进入每个目录,执行一些命令,退出目录并重复下一个目录的过程。

2 个答案:

答案 0 :(得分:1)

可能是学习推入和弹出的好时机! 我喜欢在脚本中使用这些而不是cd,这样,如果出现问题,它会更好地挂在上下文上。另外,当它成功运行时,您将回到原始目录。

注意:您可能遇到的绊脚石是建立目录的“列表”。我们可以利用bash的模式匹配功能来创建此“列表”。例如,如果我们知道您要在“列表”上想要的所有目录都必须以“ test”模式开头,则只需将“ test *”附加到当前工作目录即可。

比方说我的cwd是/ home / ben 这里有5个Dirs [test1,test2,test3,test4,test5] 要创建完整列表(并同时遍历该列表),我们可以这样做:

for dir in /home/ben/test*; do cd ${dir}; pwd; done # Visit each dir in our little list

输出:

  

/ home / ben / test1       / home / ben / test2       / home / ben / test3       / home / ben / test4       / home / ben / test5

这个小片段也做同样的事情,但是使用push和popd遍历了test * dirs列表。

for dir in /{your_path_prefix_here}/test*; do
  pushd ${dir} >/dev/null # We've arrived in this directory, and it's now in your stack. (hide the output, which displays your directory stack)

  ### Run whatever command you want, and then...  

  popd >/dev/null # Now you're right back where you were!
done

答案 1 :(得分:0)

您可以执行以下操作:

for dir in /path/to/mydir/test-*/
do
  cd $dir
  // exec your command here
done

在这种情况下,您将使用外壳程序的globlob功能来匹配所有测试目录并使用bash循环进行循环