cd
的参数将用户带到他们所在的最后一个目录,我的生活就会轻松得多。 > /etc/foo/bar/baz/moo
,然后键入:
cd /var/lib/fubarred_app/blargh/logs
我希望能够回到第一个目录而无需再次键入整个路径。
由于我在每个地方都使用了足够的命令,因此回去查找所需的路径与键入它一样困难,因此记忆键无法切断它我自己。
是否有一个简短的命令可以让我转到上一个目录?
#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的答案外,值得一提的还有pushd
和popd
,它们像堆栈一样建立目录。在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 -
,但我担心您的外壳缺少电源。 popd
和pushd
都还不错,而且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之前,您不必一次访问目录。
评论
除了@bryan的出色答案之外,您还可以考虑为每个路径创建一对别名,以便您可以在提示符下输入以下内容:“ bazmoo”或“ blarghlog” :)为什么不只使用GNU屏幕?
哪个壳?产生了很大的变化。
@沃伦·迪托那是我做所有事情的首选方式。我使用计算机的一半现在拥有自己的别名... =)
Fasd很棒。检查一下。