我目前的工作时间很多,都是在两条距离很远的树之间来回移动,并且从根本上转移了方向。令我惊讶的是,如果有一个cd的参数将用户带到他们所在的最后一个目录,我的生活就会轻松得多。 >
/etc/foo/bar/baz/moo


,然后键入:

cd /var/lib/fubarred_app/blargh/logs


我希望能够回到第一个目录而无需再次键入整个路径。

由于我在每个地方都使用了足够的命令,因此回去查找所需的路径与键入它一样困难,因此记忆键无法切断它我自己。

是否有一个简短的命令可以让我转到上一个目录?

评论

除了@bryan的出色答案之外,您还可以考虑为每个路径创建一对别名,以便您可以在提示符下输入以下内容:“ bazmoo”或“ blarghlog” :)

为什么不只使用GNU屏幕?

哪个壳?产生了很大的变化。

@沃伦·迪托那是我做所有事情的首选方式。我使用计算机的一半现在拥有自己的别名... =)

Fasd很棒。检查一下。

#1 楼

命令
cd -

将在大多数主流shell上执行您所需的交换,较旧的较长变体为
cd "$OLDPWD"

,它将使用包含先前工作目录的环境变量。

cd的POSIX手册页中提到:

DESCRIPTION
如果在执行上述步骤期间更改了PWD环境变量,则OLDPWD环境变量也应更改为旧工作目录的值(即紧接cd调用之前的当前工作目录)。
OPERANDS
-当使用连字符作为操作数时,应等效于命令:
cd "$OLDPWD" && pwd 

,该命令将切换到先前的工作目录,然后写入其名称。


评论


请记住,这实际上取决于您使用的shell,并且由于您未指定,因此很难给出不存在的“便携式”答案。

–Randal Schwartz
11年8月18日在2:22

@Randall,也许您可​​以将所有单独的Shell注释合并为一个Voltron-Shell答案。

–hyperlug
2011年8月18日在2:46

@兰德尔我正在使用bash。它也可以在ksh和zsh中工作。顺便说一句,我首先从1994版的Learning Perl学习编程,所以请原谅我。 :)

– Yitzchak
11年8月18日在15:23

@sinni确实有某些口味,至少它是bash中的内置功能。

–slhck
2011年8月24日上午7:00

在所有这些时间之后仍然非常相关。我今天才刚刚学到(或可能再学习过),这将节省很多打字和时间!

–土地
20-10-15在17:08

#2 楼

除了bryan的答案外,值得一提的还有pushdpopd,它们像堆栈一样建立目录。在Windows NT上也可以使用。但是,并非在所有shell中都可用。

例如,我们可以转到三个不同的目录,并且在调用pushd时始终会看到堆栈:

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~


连续三遍调用popd时,您以相反的顺序进入堆栈中的那些目录。同时,将再次清空堆栈。

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty


如果您使用的是Zsh,请执行以下操作:它具有一个AUTO_PUSHD选项,它将自动将cd推入堆栈。

评论


pushed和popd并非在所有shell中都可用。

–Randal Schwartz
2011年8月18日在2:23

@Wiesław:真的吗?我希望bash有...当然,我可以将cd别名为push,并且基本上相同。

–克里斯·查拉巴鲁克(Chris Charabaruk)
11年8月18日在12:12

或别名pd推入并具有两者。 BTW推入(或为pd,如果要为其加上别名)本身会交换当前目录和最后推入的目录,实质上完成了cd-的作用。

– JRobert
2011年8月18日在16:06



我喜欢这个概念,但从未习惯。

–特尔比约恩(ThorbjørnRavn Andersen)
11年8月18日在18:39

#3 楼

有一些“跳转”程序



自动跳转(具有基本功能)

j2(显然不具有某些高级功能)

z(具有高级功能的“ j”的维护版本)

这些可简化任何目录导航。您可以通过给出路径的一部分来使用它,它就可以使用。

对于您的情况

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$


您可以分配任何想要的字母在这些程序中,“ j”是一种传统:)

j2和z支持多个搜索项,...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$


...和更多选项。

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank


评论


“ j”显然是特定于外壳的。你没那么说

–Randal Schwartz
2011年8月18日在2:23

@Randal:它是如何特定于shell的?这是一个程序。

–固定
2011年8月21日在15:42

我是个白痴。 :)我现在看到了。

–Randal Schwartz
11年8月24日在0:23

#4 楼

您可以使用它轻松为目录创建别名:

a() { alias =cd\ $PWD; }

a 1


及更高版本:

1


评论


仅在了解别名和功能的外壳上。并非全部。

–Randal Schwartz
2011年8月18日在2:23

所以这跳过键入别名= parts?嗯

– Xen2050
16年5月7日在10:11

#5 楼

除了
cd -cd $OLDPWD

,您还可以使用历史记录搜索,方法是按CTRL-R并输入之前输入的cd命令的几个字母。反复按CTRL-R将带来较早的匹配项。

如果要更改的路径超过两个,则此方法将更加有用。

评论


CTRL-R不一定有帮助。您可能已经在/ some / obscure / directory / deep中并完成了“ cd evendeeperdir”,然后转到〜/ somehere / different。

–justintime
11年8月18日在14:24

大!它可用于cd以外的其他功能,非常有帮助!

–零蛋
2011年8月19日15:57

#6 楼

bashmarks使您可以为一系列文件夹添加书签,并使用制表符完成功能在它们之间跳转: >书签将被命名为“ foo”。如果要返回到该文件夹​​,请使用:
bookmark foo

查看书签列表:
go foo



#7 楼

另一种可能是仅打开两个窗口,每个目录中都放置一个窗口。

评论


但是,如果您定期使用/编辑以前的命令,则没有共享的历史记录(也许重置会得到它们...?)

– Xen2050
16年5月7日在10:13

@ Xen2050请参阅zsh中的shell选项share_history。

–拉登·罗斯伯勒(Radon Rosborough)
17年5月6日,2:14

#8 楼

我知道这并不是严格意义上的问题答案,但有助于达成将您带到重要目录的目标。 cd命令搜索到的文件夹。

从我的.bashrc文件中:在我的编码项目目录中。

export CDPATH='.:~/source/'


..带我从目前所在的位置进入〜/ sources / myproject。

简单的小功能对我有帮助目录导航很多。

评论


+1这会将CDPATH文件夹添加到cd的自动完成(TAB)列表中,这很好。但是如果。不包括在内,并且如果CDPATH文件夹中有一个与您当前目录中的文件夹同名的文件夹,则cd samename将进入CDPATH目录,而不是当前目录中的那个文件夹,即Bad。必须使用cd ./samename进入dup文件夹。

– Xen2050
16年5月7日在10:21



是的,很好的评论。始终添加第一个。,否则您会遇到奇怪的事情。

– phareim
16年5月9日在7:37



#9 楼

是的,要走的路是cd -,但我担心您的外壳缺少电源。 popdpushd都还不错,而且j看起来也不错。在过去的10年左右的时间里,它对我想要的工作正常。

我的目录管理实用程序的博客文章

如果它对您有用,那么太棒了,但是如果不答应我,您还会得到其他东西:)您根本无法独自与cd一起生活。

#10 楼

如果您只有2个目录,那么如上所述,最简单的方法是

cd -


过去我遇到过这样的事情,我做过的技巧可能会有所帮助。



将别名命令放入.cshrc文件中,类似这样的内容br />

从我的主目录链接到所需路径的快捷方式。这是一次性的事情。

alias moo /etc/foo/bar/baz/moo  
alias logs cd /var/lib/fubarred_app/blargh/logs



这样就可以轻松更改目录:

cd ~
ln -s /var/lib/fubarred_app/blargh/logs blargh
ln -s /etc/foo/bar/baz/moo


#11 楼

Autojump是bash / sh / zsh“ cd”命令,根据您的操作,请观看此视频。

因此,它在了解了最后一个文件夹之后将带您进入moo

j moo


#12 楼


我有我自己的工具,但也将看看Dereks工具和j
当然,来回跳动的首选是

cd-

我的工具适用于locate可用的系统上具有唯一名称的目录;它会搜索匹配的目录名称,然后跳到第一个匹配项:
beam () 
{ 
    ldir=$(locate  | egrep "$" | head -n 1);
    if [[ -d $ldir ]]; then
        echo $ldir;
        cd $ldir;
    else
        echo "no directory "$ldir;
    fi
}

依赖项:

定位
grep
< br缺点:

找不到比上一次更新的b-run更新的目录
如果有多个目录匹配,则取决于您的运气,是否满足于此

改进/修改:

除了选择第一个目录,还可以修改代码以显示选择列表,提示用户输入1 ,2,3,...转到/ bin,/ usr / bin,/ usr / local / bin ...

用法:

将函数放入您/etc/bash.bashrc或〜/ .bashprofile,以方便使用。

我的解决方案的优点:

不限于2个目录,例如cd -

在使用Beam之前,您不必一次访问目录。