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


我目前花了很多工作時間在兩條路徑之間來回移動,這兩條路徑在樹的很遠處並且在根部相互轉移。令我感到震驚的是,如果有爭議的話,我的生活將會輕鬆得多 cd 將用戶帶到他們所在的最後一個目錄。

也就是說,如果我在:

/etc/foo/bar/baz/moo

然後鍵入:

cd /var/lib/fubarred_app/blargh/logs

我希望能夠返回到第一個目錄,而無需再次鍵入整個路徑。

因為我在每個地方都使用了足夠多的命令,所以內存鍵並沒有削減它,因為它本身很難回去找到我想要的路徑。

是否有一個簡短的命令,讓我去上一個目錄?


209
2017-08-17 20:18


起源


此外 @布賴恩很好的答案,您可以考慮為每個路徑創建一對別名,這樣您就可以輸入類似的內容:bazmoo“ 要么 ”blarghlog“在提示:) - warren
你為什麼不用它 GNU屏幕? - Shi
哪個殼?這產生了巨大的變化。 - Randal Schwartz
@warren同上。這是我做任何事情的首選方式。我用我的電腦的一半現在有自己的別名... =) - ixtmixilix
Fasd太棒了。看看這個。 - majkinetor


答案:


命令

cd -

將執行你需要在大多數主流外殼上的交換,舊的更長的變體是

cd "$OLDPWD"

它將使用包含先前工作目錄的環境變量。


POSIX手冊頁 cd 提到:

描述

如果在執行上述步驟期間更改了PWD環境變量,則OLDPWD環境變量也應更改為舊工作目錄的值(即調用cd之前的當前工作目錄)。

OPERANDS

- 當連字符用作操作數時,這應該等同於命令:

cd "$OLDPWD" && pwd 

它將更改為上一個工作目錄,然後寫入其名稱。


292
2017-08-17 20:23



請記住,這實際上取決於您正在使用的shell,並且由於您沒有指定,因此很難給出不存在的“可移植”答案。 - Randal Schwartz
@ Randall,也許您可以將所有單獨的shell評論合併到一個Voltron-Shell答案中。 - hyperslug
@Randall。我正在使用bash。它也適用於ksh和zsh。順便說一下,我第一次學習編程從1994年版開始 學習Perl 所以請原諒我,而我有點狂熱。 :) - Yitzchak
嗯,我用過 cd $OLDPWD 為了這。主流砲彈提供了更短的形式,這很好。 - ulidtko
@sinni某些口味 做 有 pushd,至少它是內置的 bash。 - slhck


除了bryan的回答之外,值得一提的還有 pushd 和 popd,像堆棧一樣構建目錄。這也適用於Windows NT;但是,它不適用於所有砲彈。

例如,我們可以轉到三個不同的目錄,當你打電話時,你總能看到你的堆棧 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在堆棧上。


105
2017-08-17 20:35



pushd和popd並非在所有shell中都可用。 - Randal Schwartz
@Wiesław:真的嗎?我希望bash有那個...當然,我可以別名 cd至 pushd,它大部分都是一樣的。 - Chris Charabaruk
或別名pd到pushd並且兩者都有。 BTW pushd(或pd,如果你的別名)自己交換當前目錄和最後推送的目錄,基本上完成'cd - '的作用。 - JRobert
我喜歡這個概念但從未習慣過它們。 - Thorbjørn Ravn Andersen


有一些“跳”程序

  • autojump (保持基本功能)
  • 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

13
2017-08-17 23:52



“j”顯然是特定於殼的。你沒有這麼說。 - Randal Schwartz
@Randal:它是如何特定於shell的?這是一個程序。 - Fixee
我是個白痴。 :)我現在看到了。 - Randal Schwartz


此外 cd - 和 cd $OLDPWD

您可以按下使用歷史搜索 CTRL-R 並輸入幾個字母 cd 你之前輸入的命令。緊迫 CTRL-R 反復將帶來較舊的比賽。

如果要更改兩個以上的路徑,此方法將更有用。


10
2017-08-18 09:44



CTRL-R不一定有幫助。您可能已經/ some / obscure / directory / deep並完成了“cd evendeeperdir”然後轉到〜/ somehere / different。 - justintime
大!它適用於其他事情 cd,很大的幫助! - Niloct


您可以使用它來輕鬆為目錄創建別名:

a() { alias $1=cd\ $PWD; }

a 1

然後:

1

9
2017-08-18 01:50



僅在了解別名和功能的shell上。不是全部都做。 - Randal Schwartz
所以這會跳過輸入 alias = 部分? hmmmm - Xen2050


bashmarks 將允許您為一系列文件夾添加書籤並使用標籤完成在它們之間跳轉:

要為文件夾添加書籤,只需轉到該文件夾,然後將其標記為:

bookmark foo

書籤將命名為“foo”。當您想要返回該文件夾時使用:

go foo

要查看書籤列表:

bookmarksshow

選項卡完成工作,轉到shoobie書籤,簡單地說:

go sho[tab]

6
2017-08-18 08:54





另一種可能性是只打開兩個窗口,其中一個位於每個目錄。


4
2017-08-18 03:00



但是,如果你經常使用/編輯以前的命令(也許重置會讓他們......?),沒有共享歷史記錄 - Xen2050
@ Xen2050查看shell選項 share_history 在zsh。 - Radon Rosborough


我知道這並不是嚴格意義上對你的問題的答案,但它有助於實現目標 帶你到你的重要目錄

在任何血統UNIX-bash你可以使用 CDPATH 擴展cd-command搜索的文件夾。

來自我的.bashrc文件:

export CDPATH='.:~/source/'

光盤 首先在當前文件夾中搜索,然後在我的編碼項目目錄中搜索。

cd myproject

..帶我去 〜/來源/ myproject的 我目前在哪裡。

簡單的小功能,幫助我的目錄導航很多。


4
2017-08-19 11:11



+1這會將CDPATH文件夾添加到 cd自動完成(TAB)列表,這是好的。但 如果 . 不包括在內 如果CDPATH文件夾中有一個文件夾 一樣的名字 然後,作為當前目錄中的一個 cd samename 將轉到CDPATH目錄並且 不 當前目錄中的那個,這是壞的。必須使用 cd ./samename 進入一個dup文件夾。 - Xen2050
是的,好評。始終包括第一個 。,或者你會遇到奇怪的東西。 - phareim


對, cd - 是要走的路,但我擔心你的外殼缺乏力量。 popd 和 pushd 也很好,那 j 事情看起來也不錯。

我會將自己的實用程序扔進戒指......這是我在過去10年左右的時間裡一直在構建,定制和遷移的東西,它對我想要它做的很好。

我的目錄管理實用程序的博客帖子

如果它適合你,那麼真棒,但如果沒有,那麼答應我你會得到別的東西:)你根本不能忍受 cd 單獨。


3
2017-08-18 14:18