在linux上找几个目录

时间:2012-08-30 13:39:40

标签: linux cd

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

cd ..

但是当我想要去7个目录时除了输入七(7)次cd ..之外还有什么办法吗?

14 个答案:

答案 0 :(得分:54)

cd ../../../../../../../

另一个有用的导航提示是,例如,假设你继续从一个目录(称之为A)切换到另一个目录(称之为B),在你的情况下是7个目录。

所以,如果你在目录A:

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

这将立即返回目录A. -扩展到您所在的上一个目录。

答案 1 :(得分:16)

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

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

并使用:

$ cd.. 7

<强> UPD: 或者在当前路径中制作更强大的变体cd到dir名称:

# 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

答案 2 :(得分:8)

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

答案 3 :(得分:7)

如果有一个命令,我会使用很多,我只会做一个别名。

您可以输入

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

然后你可以使用..升级一级,...升级两级。

答案 4 :(得分:6)

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

通常,当你使用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

答案 5 :(得分:5)

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

有一些cool article可以应用一些黑客来改善您的导航。

答案 6 :(得分:4)

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

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

e.g。要进入7个目录,必须输入up 7

答案 7 :(得分:3)

for i in {1..7}; do cd ..; done

答案 8 :(得分:2)

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

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

所以用法只是:

user ~ $ up 3
user / $

答案 9 :(得分:1)

嗯,我不这么认为。

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

答案 10 :(得分:1)

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

如果您在 / a / b / c / d ,则“向上1”会转到 / a / b / c ,依此类推。这很标准,并涵盖了大多数其他答案。

现在,对于特殊部分;使用负数会从另一个方向引导你。因此,如果您在 / a / b / c / d ,则“向上-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上下载/安装。

答案 11 :(得分:1)

对于鱼类用户,

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

并将其保存到您的: 〜/的.config /鱼/功能/ cdd.fish

并且只是$ cdd 3 上3个目录。

答案 12 :(得分:1)

我制作了一个小实用程序,可以简化导航深层目录结构的过程:https://github.com/ianatha/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/

答案 13 :(得分:0)

您可以尝试此解决方案。这对我来说很好:

&#13;
&#13;
#!/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
&#13;
&#13;
&#13;

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