3

cd ..向上一个文件夹。

是否有(单行)命令可以打开 n 个文件夹?

4

6 回答 6

4

你当然可以定义一个函数来做到这一点:

$ go_up() { for i in $(seq $1); do cd ..; done }
$ go_up 3 # go 3 directories up
于 2013-06-29T14:28:03.510 回答
3

我不知道有任何命令可以做到这一点,但你自己创建一个很容易。例如,只需添加

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

在你的~/.bashrc文件中,在你创建一个新的 shell 之后,你可以运行

cdn N

你会按N目录向上移动

于 2013-06-29T14:29:22.313 回答
3

好吧,另一个非常有趣的答案,这真的是一个单行字,向上 42 个父目录:

cd $(yes ../|head -42|tr -d \\n)

与 gniourf_gniourf 的其他答案相同,它很cd -友好(它只是比最短答案长几个字符)。

替换42为您喜欢的号码。


既然您了解了美妙命令的惊人力量yes,您就可以加入黑暗面并使用邪恶命令eval,当我们这样做时,我们可以使用可怕的反引号:

eval `yes 'cd ..;'|head -42`

这是迄今为止最短的单行,但它真的很糟糕:它使用eval, 反引号而且它cd -不友好。但是,嘿,它真的很好用而且很有趣!

于 2013-06-29T15:32:41.100 回答
2

您可以使用单行for循环:..

for i in {1..3}; do cd ../; done

3用你的替换n

例如:

m@mariachi:~/test/5/4/3/2/1$ pwd
/home/m/test/5/4/3/2/1

m@mariachi:~/test/5/4/3/2/1$ for i in {1..3}; do cd ../; done

m@mariachi:~/test/5/4$ pwd
/home/m/test/5/4

...但是我认为它不会比打字cd然后 ..点击tab你想要上升的每个级别快得多!:)

于 2013-06-29T14:30:32.960 回答
2

你多久上升一次超过五个级别?如果答案不是太频繁,我建议您将这些cd -友好别名放在您的个人资料中:

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

好处

  • 没有 bashims,没有 zshisms,没有 kshisms。
  • 适用于任何支持别名的 shell
  • 尽可能易读易懂。
于 2013-06-29T16:15:41.730 回答
1

一个有趣的方法:

cdupn() {
    local a
    [[ $1 =~ ^[[:digit:]]+$ ]] && printf -v a "%$1s" && cd "${a// /../}"
}

它是如何工作的?

  • 我们首先检查参数是否确实是一个数字(数字链)。
  • a我们用$1空格填充变量。
  • 我们执行cdwhere 每个空格a已被替换../

用于:

cdupn 42

上到第四十个父目录。

这种方法的优点是你仍然可以cd -回到以前的目录,这与使用循环的方法不同。

绝对值得投入您的.bashrc. 或不。

于 2013-06-29T15:03:30.707 回答