
目前,我花了很多工作時間在兩條路徑之間來回移動,這兩條路徑距離樹很遠,並且在根部相互偏離。我突然意識到,如果有一個參數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
and 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
將帶來較舊的比賽。
如果您有兩個以上的路徑需要更改,則此方法會更有用。