17

一般来说,我们使用

cd ..用于转到父目录

cd ../../去父母的父目录。和

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

有什么简化的方法吗?

我使用的shell是ksh。

4

10 回答 10

14

此功能适用于 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
于 2009-12-09T06:35:14.630 回答
3

我还以为我很懒...

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

alias up='cd ..'
alias up2='cd ../..'
alias up3='cd ../../..'
alias up4='cd ../../../..'
alias up5='cd ../../../../..'
alias up6='cd ../../../../../..'
于 2009-12-09T06:34:58.280 回答
2

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

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

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

于 2009-12-09T06:40:31.890 回答
2

您可以查看最近的项目bd

如果你在这条路上

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

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

bd site
于 2013-09-09T08:32:24.503 回答
0

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

于 2009-12-09T06:25:01.763 回答
0

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

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

最好使用绝对路径alias

于 2009-12-09T06:26:22.900 回答
0

用于cd /转到文件系统的根目录,并cd ~转到您的主目录。
示例:去你的日志主管只是做cd /var/log.

于 2009-12-09T06:34:58.967 回答
0

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

cdup() {
    set -- "${1-1}"
    while test "$1" -gt 0; do
      cd ..
      set -- "$(($1-1))"
    done
}
于 2009-12-09T06:37:15.267 回答
0

这通常是我的做法。当然,在 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 脚本中所做的事情的人都应该毫不费力地遵循这一点。如果你的脚本真的很复杂,那么添加一些这样的注释会有所帮助:

# 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>
于 2009-12-09T21:51:11.980 回答
0

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

  • 要向上 4 个目录,请使用up -4.
  • 要转到匹配通配符模式的最近父目录site*,请使用up '/site*/'.
  • 要转到与正则表达式匹配的最近父目录[pP]roj(ect)?,请使用up -E '[pP]roj(ect)?'.
于 2019-03-14T22:06:04.260 回答