是否有命令可以不使用cd返回目录中的许多步骤?


14

我一直在走'cd ../../../../'。有没有可以让我进入“ cmd 4”的命令/别名,我将被带回4个目录?


ls?当然可以cd吗?
克里斯·杰斯特·杨

是的,我只是匆忙写的;)现在就编辑它。

这样做吗?:alias cmd5 = "cd ../../../../../"
ypercubeᵀᴹ2011年

好吧,我想我可以写出1到10个左右的时间,但是最好有一个聪明的方法。那真的不适合我。但是,如果没有其他解决方案出现,将这样做。

Answers:


16

把它放在你的~/.bashrc

cdup() {
  levels=${1-1}
  while ((levels--)); do
    cd ..
  done
}

(名称cdup来自相应的FTP命令,仅供参考。)


感谢您的答复,并选择了jleedev的答案,因为答案短了1行,我无法确定该选谁!不管怎么说,还是要谢谢你!

@Muu:两种答案都适用,但是我的适用于许多级别,@ jleedev的适用范围很小(无论堆栈限制如何)。;-)(我敢肯定,你将永远不会达到最大极限,无论哪种方式,但我的是更普遍的,就是我想要知道的:-))
克里斯小丑,年轻

公平的说,那我就给你答案了。对不起jleedev-尽管我很可能会继续使用您的解决方案,因为我会忘记更改它:)

11

在这种情况下,我被教导要使用“推”和“弹出”命令。

例如,输入“ pushd”。然后“ cd / home”。现在输入“ popd”,您将回到开始的地方。

'pushd'/'popd'是一个堆栈,您可以根据需要将任意数量的目录压入其中,但是最后一次打开是在弹出时首先关闭。


嗯很好 没有听说过。不太符合我的期望,但也会使用它。谢谢。

10

当然可以,为什么不呢?

up(){
    [$#= 0] && cd .. &&返回
    [$ 1 = 0] &&返回
    cd .. && up $(($ 1-1))
}

Bash不是尾递归的,对吗?如果这样做,您可能会堆栈溢出up 500。:-)
克里斯·杰斯特·杨

6
如果您的目录嵌套得那么深,那么您会感到同情。
李乔(Josh Lee)

用这个。以1线击败克里斯;)

@Muu:我不知道这个问题是代码高尔夫!;-) BTW,快来加入我们!codegolf.stackexchange.com
克里斯·杰斯特·杨

3
@Muu请记住,递归通常不是编写Shell脚本的正确方法。
Josh Lee

4

快速而肮脏:

cmd () { dir=.; for i in $(seq 1 $1); do dir=$dir/..; done; pushd $dir; }

制定仅更改目录一次。


2

这是另一种方法:

function cdup
{
    cd $(for ((i=0 ; i<$1 ;i++)); do printf "../" ; done)
}

1

您可能想研究使用pushdpopd设置位置标记,然后轻松地从更改的目录回到那里。

您还可以使用一个经常使用的目录的名称来设置一个变量,然后在其中添加CD:

MYPROJ=~/projects/name/src
cd $MYPROJ
proj1='cd $MYPROJ'


1

printf然后使用构建路径cd

cdup() {
    local path
    printf -v path '%*s' "${1:-1}"
    cd "${path// /../}"
}

用于:

cdup 4 # to go up four directories
cdup 1 # to explicitly go up one directory
cdup   # to implicitly go up one

0

有两种想法可能对您有用:

  1. cd-
    切换回您所在的最后一个目录。我一直在使用它,从代码树的深处回到它的根目录……虽然只有当您将cd放入其中时,它才起作用更改。

  2. cdd old new
    这是我过去编写的脚本函数,用于在相似的树之间移动。基本上,它需要两个参数并在路径上进行了正则表达式,非常适合在分支等之间移动。例如,如果您在〜/ bzr / web / trunk / path / to / feature中,并且需要进入〜/ bzr / web / feature-branch / path / to / feature,则可以这样做cdd trunk feature-branch。我曾经在AIX上使用过时的Shell语言实现了该实现,但它的确是微不足道的,因此如果需要,可以在所选的Shell中轻松实现。对我们来说,它非常有用,因为结构看起来像:... / {product} / {version} / {release} / {src,bld,dbg,pkg,tst} / {component} / ...那棵树很快就疯了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.