【问题标题】:changing to parent directory in unix在Unix中更改为父目录
【发布时间】:2010-12-24 17:20:51
【问题描述】:

一般我们使用

cd .. 用于转到父目录

cd ../../ 转到父目录。和

cd ../../../../../ 用于第 5 个父目录。

有什么简化的方法吗?

我使用的shell是ksh。

【问题讨论】:

  • 你可以去掉最后的斜线。此外,您的问题的答案可能取决于哪个外壳。
  • 一些快捷方式:cd - 带你回到你刚从哪里来的地方。 cd ~ 带你到你的主目录。
  • 你可以签出新命令'bd':见my answer below

标签: unix shell command-line ksh


【解决方案1】:

如果您不喜欢输入或记住文件名,您可以使用像 NerdTree 之类的东西来导航目录?

【讨论】:

    【解决方案2】:

    您可以定义别名来简化这种cd 操作。

    请注意,在 ../../../.. 等方面使用别名很容易出错,因为您必须非常确定当前目录与您想要的目录之间的关系是。

    最好使用带有alias的绝对路径

    【讨论】:

      【解决方案3】:

      我还以为我很懒...

      很久以前,我厌倦了输入cd ..,因此,大约在 1988 年,我的一个标准别名(以及 MSDOS/Windows 的批处理文件)是up。也许我应该扩展这个概念:

      alias up='cd ..'
      alias up2='cd ../..'
      alias up3='cd ../../..'
      alias up4='cd ../../../..'
      alias up5='cd ../../../../..'
      alias up6='cd ../../../../../..'
      

      【讨论】:

        【解决方案4】:

        使用cd / 进入文件系统的根目录,使用cd ~ 进入主目录。
        示例:要去找你的日志主管,只需执行cd /var/log

        【讨论】:

          【解决方案5】:

          此功能适用于 Bash,但也可以为其他人做类似的事情(这可能在 ksh 和 zsh 中按原样工作):

          cdn () { pushd .; for ((i=1; i<=$1; i++)); do cd ..; done; pwd; }
          

          示例用法:

          /some/dirs/and/subdirs$ cdn 3
          /some/dirs/and/subdirs /some/dirs/and/subdirs
          /some
          /some$ popd
          /some/dirs/and/subdirs$
          

          这是一个函数,它将cd 指向当前工作目录上方的命名子目录:

          cdu () { cd "${PWD%/$1/*}/$1"; }
          

          示例用法:

          /usr/share/atom/resources/app/apm/src/generator$ cdu apm
          /usr/share/atom/resources/app/apm$ cdu resources
          /usr/share/atom/resources$ cd -
          /usr/share/atom/resources/app/apm$ cdu share
          /usr/share
          

          【讨论】:

          • 我接受这一点,因为我们似乎没有直接的命令行快捷方式。但我希望有一些方法可以在命令行上以短的方式做到这一点。
          • 我真的很喜欢cdu 功能。它很简单,只依赖于cd 和变量替换。
          【解决方案6】:

          对于 Bourne 类型的 shell(包括 ksh),您可以编写一个 shell 函数:

          cdup() {
              set -- "${1-1}"
              while test "$1" -gt 0; do
                cd ..
                set -- "$(($1-1))"
              done
          }
          

          【讨论】:

            【解决方案7】:

            如果你设置任何这样的别名,你需要小心。当您cd ../../../../.. 时,您不会总是上 5 个目录。如果你在 / 下只有 2 或 3 个目录,你将在 / 中结束。自己试试吧。

            $ cd ~
            $ pwd
            /home/you
            $ cd ../../../..
            $ pwd
            /
            

            这是因为 / 的父目录实际上是 /。

            【讨论】:

            • 这不能被视为答案,而应该是评论。
            • 您会如何建议这样的警示性“评论”?为了清晰起见,它似乎值得垂直空间。有时,一个问题的真正答案是弄清楚你可能不想按照你最初认为你想做的方式做事。我希望您知道您的“cdn 5”可能只是一个“cdn 1”可能会为您节省的不仅仅是几个点。
            【解决方案8】:

            这通常是我的做法。当然,在 ksh 中,您可能会将导航键设置为其他内容。当我使用 ksh 时,我将它们设置为 vi 样式,这样就可以使用 k 而不是向上箭头。

            在 shell 脚本中,最好是显式的。如果您可以使用绝对路径名,请执行以下命令并运行以下命令:

            cd /webdata/cgi-bin
            

            如果脚本可以运行以作用于不同目录中的文件,那么您可以考虑这样的事情:

            TOPDIR="/webdata"
            cd $TOPDIR/cgi-bin
            

            但是,如果您真的不能做到其中任何一个,那么请坚持 .. 像这样的链:

            chmod +x *.py
            cd ../../../cgi-bin
            

            这很清楚。在当前工作目录中执行操作,然后向上导航 3 级并选择 cgi-bin 目录。任何能够理解您在 shell 脚本中所做的事情的人都应该毫不费力地遵循这一点。如果您的脚本真的很复杂,那么添加一些这样的 cmets 会有所帮助:

            # change to TOPDIR/cartsys/production/code/python
            cd python    
            chmod +x *.py
            cd ../../../cgi-bin
            

            这意味着您在代码目录中并向下一级更改为 python,因此忘记您在目录层次结构中的位置的读者会看到一个提醒,帮助他们向上计数 3 级。

            cd ..
            
            <up arrow><ENTER>
            <up arrow><ENTER>
            <up arrow><ENTER>
            <up arrow><ENTER>
            

            【讨论】:

              【解决方案9】:

              您可以查看recent project bd

              如果你在这条路上

              /home/user/project/src/org/main/site/utils/file/reader/whatever 
              

              并且您想快速转到site 目录(而不是输入cd ../../../..),
              然后只需输入:

              bd site
              

              【讨论】:

                【解决方案10】:

                我为此用例编写了一个 shell 实用程序:https://github.com/kkew3/cdup。举个例子:

                • 要向上走 4 个目录,请使用 up -4
                • 要转到与通配模式site* 匹配的最近父目录,请使用up '/site*/'
                • 要转到与正则表达式[pP]roj(ect)? 匹配的最近父目录,请使用up -E '[pP]roj(ect)?'

                【讨论】:

                  猜你喜欢
                  • 2013-10-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-02-03
                  • 2013-01-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-05-27
                  相关资源
                  最近更新 更多