转到最底层的目录?

时间:2016-10-31 22:38:35

标签: linux bash command-line

我正在使用包含很多嵌套文件夹的目录,例如/ path / to / project / users / me / tutorial

我找到了一个简洁的方法来浏览文件夹: https://superuser.com/questions/449687/using-cd-to-go-up-multiple-directory-levels

但我想知道如何顺其自然。这看起来要困难得多,但有关目录结构的一些帮助。每个目录中只有另一个目录,或者可能是目录和自述文件。

我正在寻找的目录看起来更像传统项目,并且可能包含随机目录和文件(当然比其他任何更高级目录更多)。

现在我正在使用呃...递归bash函数cd进入下面的唯一目录,直到有0或2+目录循环。这还不行..

我是否过于复杂?我觉得使用find会有一些甜蜜的解决方案。理想情况下,我希望能够输入类似的内容:

down path

其中path是顶级文件夹。这将把我带到底部文件夹教程。

3 个答案:

答案 0 :(得分:1)

有一个名为CDPATH的环境变量。 cd使用此变量的方式与搜索路径名时可执行文件使用PATH的方式相同。

例如,如果您有以下目录:

/path/to/project/users/me
/path/to/project/users/me/tutorial
/path/to/project/users/him
/path/to/project/users/him/test
/path/to/project/users/her
/path/to/project/users/her/uat
/path/to/project/users/her/dev
/path/to/application
/path/to/application/conf
/path/to/application/bin
/path/to/application/share

export CDPATH=/path/to/project/users/me:/path/to/project/users/him:/path/to/project/users/her:/path/to/application

cd tutorial之类的简单命令会搜索tutorial的上述路径。

让我们假装/path/to/application下面有目录,confbinshare。只要前面没有任何路径有cd conf目录,简单/path/to/application/conf就会将您发送到conf。此行为类似于PATH中的可执行文件。第一次出现总是被选中

答案 1 :(得分:0)

我的尝试 - 这实际上现在有效!我仍然担心它可能很容易通过符号链接或其他一些方式变得无限。

另外,我必须像这样运行 . down 从第一个空文件夹中。

#!/bin/bash
function GoDownOnce {
  Dirs=$(find ./ -maxdepth 1 -mindepth 1 -type d)
  NumDirs=$(echo $Dirs | wc -w)
  echo $Dirs
  echo $NumDirs
  if [ "$NumDirs" = "1" ]; then
      cd $Dirs
          GoDownOnce
  fi
}
GoDownOnce

答案 2 :(得分:0)

一位朋友还建议这个甜蜜的一个班轮:

cd $(find . -type d -name tutorial)

不可否认,这并不是我所要求的,但它可以很好地完成工作。