如何更改到上一個目錄而不是向上目錄?

如何更改到上一個目錄而不是向上目錄?

目前,我花了很多工作時間在兩條路徑之間來回移動,這兩條路徑距離樹很遠,並且在根部相互偏離。我突然意識到,如果有一個參數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 的答案之外,值得一提的是還有pushdand 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

有一些“跳躍”程序

  • 自動跳轉(保持基本功能)
  • 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

答案4

除了 cd -cd $OLDPWD

您可以按下並輸入先前輸入的命令CTRL-R的幾個字母來使用歷史搜尋。cd反覆按下CTRL-R將帶來較舊的比賽。

如果您有兩個以上的路徑需要更改,則此方法會更有用。

相關內容