49

当我想上一个目录时,我使用

cd ..

但是,当我想向上 7 个目录时,除了键入七 (7) 次之外,还有什么方法可以做到这一点cd ..

4

14 回答 14

79
cd ../../../../../../../

另外一个有用的导航提示是,例如,假设您不断从一个目录(称为 A)切换到另一个目录(称为 B),在您的情况下,它有 7 个目录。

因此,如果您在目录 A 中:

A> cd ../../../../../../../
B> // Now you're in directory B and want to go back to A
B> cd -

这将直接移回目录 A。-展开到您所在的上一个目录。

于 2012-08-30T13:43:37.810 回答
23

制作别名(在你 ~/.bashrc 中)

function cd_up() {
  cd $(printf "%0.0s../" $(seq 1 $1));
}
alias 'cd..'='cd_up'

并使用:

$ cd.. 7

UPD: 或制作更强大的变体,cd 到当前路径中的目录名称:

# cd up to n dirs
# using:  cd.. 10   cd.. dir
function cd_up() {
  case $1 in
    *[!0-9]*)                                          # if no a number
      cd $( pwd | sed -r "s|(.*/$1[^/]*/).*|\1|" )     # search dir_name in current path, if found - cd to it
      ;;                                               # if not found - not cd
    *)
      cd $(printf "%0.0s../" $(seq 1 $1));             # cd ../../../../  (N dirs)
    ;;
  esac
}
alias 'cd..'='cd_up'                                # can not name function 'cd..'

利用:

$ cd /home/user/documents/projects/reports/2014-10-01
$ cd.. doc
$ pwd
> /home/user/documents
于 2014-10-01T05:47:02.743 回答
10

您可以使用pushd .记住一个目录并popd返回到它。

于 2012-08-30T13:47:09.377 回答
7

如果有一个我经常使用的命令,我只会创建一个别名。

你可以输入

alias ..='cd ..'
alias ...='cd ../..'

然后你可以只使用..上一级和...上两级。

于 2012-08-30T13:50:30.710 回答
5

这是我发现的一个小改进:

通常,当您使用 cd .. 后退一个目录时,您最终会前进一个目录。为了使这项工作,您必须使用函数而不是别名,所以而不是:

alias ..=”cd ../”
alias ..2=”cd ../../”

您可以使用:

..()
{
cd ../$@
}
..2()
{
cd ../../$@
}

但是,在使用它之后,您很快就会发现您缺少此功能的命令完成功能,这使得它的用处远没有它可能的用处。因此,我回去为这个函数添加了我自己的 bash 补全函数,如果你想避免的话,可以将其粘贴到你的 ~/.bashrc 或从 ~/.bashrc 调用的任何文件(例如 ~/.bash_completion)中混乱。这是完成代码:

_..()
{
local cur=../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _.. -o nospace -S / ..

_..2()
{
local cur=../../${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -d — $cur) )
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’)
done
}
complete -F _..2 -o nospace -S / ..2
于 2013-04-14T08:35:22.977 回答
4

不记得我从哪里复制了这个函数,但它对我很有用(例如,你可以放入.bashrc文件中)

up() { local p= i=${1:-1}; while (( i-- )); do p+=../; done; cd "$p$2" && pwd; }

例如,要向上 7 个目录,必须键入up 7

于 2015-12-04T14:27:03.383 回答
3

你可以这样做cd ../../../../../../../

有一篇很酷的文章,介绍了一些可以用来改进导航的技巧。

于 2012-08-30T13:43:00.520 回答
2
for i in {1..7}; do cd ..; done
于 2012-08-30T13:44:47.207 回答
1

嗯,我不这么认为。

但是你可以写cd ../../../..(等等)而不是 7 次 cd ..

于 2012-08-30T13:43:25.663 回答
1

这个漂亮的功能支持双向上升。

如果您在/a/b/c/d中,则“up 1”将带您到/a/b/c,依此类推。那是非常标准的,并且在大多数其他答案中都涵盖了。

现在,对于特殊部分;使用负数会让你从另一个方向上升。所以,如果你在/a/b/c/d,'up -1' 会带你去/a,依此类推。

function up() {
    UP=$1

    if [[ $UP =~ ^[\-0-9]+$ ]]; then
        if ((UP<0)); then
            UP=${UP#-}
            cd $(echo $PWD | cut -d/ -f1-$((UP+1)))
        else
            cd $(printf "%0.s../" $(seq 1 ${UP}));
        fi
    fi
}

可在github上下载/安装。

于 2017-04-06T03:47:02.033 回答
1

您可以将以下功能添加到您的.bashrc

# ~/.bashrc
up() {
  for D in $(seq 1 $1);
     do 
       cd ..
     done
}

所以用法很简单:

user ~ $ up 3
user / $
于 2015-09-08T05:45:42.583 回答
1

我制作了一个小实用程序,可以更轻松地导航深层目录结构:https ://github.com/ianatha/up 。

安装后,up您可以:

$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/service/db/
$ up example
$ pwd
/Users/jdoe/Developer/backend/src/main/java/com/example/
$ up 4
$ pwd
/Users/jdoe/Developer/backend/src/
于 2019-08-13T18:42:42.730 回答
1

对于鱼类用户,

function cdd
   for x in (seq $argv)
     cd ..
   end
end

并将其保存到您的:~/.config/fish/functions/cdd.fish

只需$ cdd 3 上 3 个目录。

于 2017-09-14T15:06:31.240 回答
0

你可以试试这个解决方案。这对我来说很好用:

#!/bin/bash

#this sctipt should take one parameter - number of steps. And do "cd" command step times.
# example usage: cd `cde 3` 

NEW_PATH=$(pwd)

step="../"

upper=""

for i in seq $1  
do 
        upper="$upper$step"
done

echo $upper

我在 ~/.barsh 文件中创建了别名。这对我来说很好。
例如,最多三个文件夹。
$cd `cde 3`

于 2015-08-13T18:13:19.207 回答