我目前花费了大量工作时间在两条路径之间来回移动,这两条路径在树的很下方,而且在根部相互转移。我突然想到,如果有一个参数可以让cd
用户转到他们所在的最后一个目录,我的生活会轻松很多。
也就是说,如果我在:
/etc/foo/bar/baz/moo
然后输入:
cd /var/lib/fubarred_app/blargh/logs
我希望能够返回到第一个目录而不必再次输入整个路径。
记忆键不起作用,因为我在每个地方使用了足够多的命令,所以返回并找到我想要的路径与自己输入一样困难。
是否有一个简短的命令可以让我回到上一个目录?
答案1
命令
cd -
将在大多数主流 shell 上执行所需的交换,较旧的较长版本是
cd "$OLDPWD"
它将使用包含前一个工作目录的环境变量。
这POSIX 手册页cd
提及:
描述
如果在执行上述步骤期间,PWD 环境变量发生变化,则 OLDPWD 环境变量也应更改为旧工作目录的值(即调用 cd 之前的当前工作目录)。
操作数
- 当使用连字符作为操作数时,这应等同于以下命令:
cd "$OLDPWD" && pwd
它将改变到上一个工作目录然后写入其名称。
答案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
入堆栈。
答案3
有一些“跳跃”程序
这些简化了任何类型的目录导航。你只需给出路径的一部分就可以使用它。
在你的情况下
~$ 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
答案4
除了
cd -
和cd $OLDPWD
您可以使用历史搜索,只需按下并输入之前输入的命令CTRL-R
的几个字母即可。反复按下将显示较早的匹配项。cd
CTRL-R
如果有两条以上的路径需要更改,此方法将更有用。