我怎样才能更改到上一个目录而不是向上移动?

我怎样才能更改到上一个目录而不是向上移动?

我目前花费了大量工作时间在两条路径之间来回移动,这两条路径在树的很下方,而且在根部相互转移。我突然想到,如果有一个参数可以让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 的回答之外,值得一提的是还有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入堆栈。

答案3

有一些“跳跃”程序

  • 自动跳转(保留基本功能)
  • j2 (显然一些高级功能没有得到维护)
  • (具有高级功能的“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

答案4

除了 cd -cd $OLDPWD

您可以使用历史搜索,只需按下并输入之前输入的命令CTRL-R的几个字母即可。反复按下将显示较早的匹配项。cdCTRL-R

如果有两条以上的路径需要更改,此方法将更有用。

相关内容