情景linux--如何擺脫深路徑的頻繁切換煩惱?

情景

一般狀況下,在linux系統上切換目錄的成本很低,使用cd命令就能夠了。若是須要在一個目錄的不一樣的子目錄和其父目錄之間切換,進入到這個目錄以後,再使用相對路徑會比較方便。若是要切換的目錄的路徑較淺,那使用絕對路徑也何嘗不可。linux

可是,若是須要頻繁在兩個以上的深路徑的目錄裏切換,不管使用相對路徑仍是絕對路徑,切換目錄都會比較耗時,嚴重影響你工做的效率。windows

有沒有什麼好方法呢?code

方案

爲了方便舉例,咱們在當前用戶的根目錄下建立一個目錄dir_test,而後進入到該目錄下。test

$ pwd
/home/j-tester/dir_test

再在這個目錄下建立幾個路徑較深的目錄:效率

$ mkdir -p 1/11/111/1111/11111 2/22/222/2222/22222 3/33/333/3333/33333 4/44/444/4444/44444

爲了方便演示和說明,故意將每一個目錄的名稱都設置爲數字,且根據層次依次增長數字的位數。實際情景下遇到的長路徑不管是目錄名稱的長度仍是每層目錄下的子目錄數量都比本例要複雜得多的。變量

查看一下這些個目錄:擴展

$ ls -l */*/*/*/*
1/11/111/1111/11111:
總用量 0

2/22/222/2222/22222:
總用量 0

3/33/333/3333/33333:
總用量 0

4/44/444/4444/44444:
總用量 0

兩個目錄

若是隻須要在兩個目錄之間切換,不管目錄的路徑長短,使用cd -(切換到上一個目錄)應該是最高效的。方法

好比,只須要在1111133333兩個目錄之間切換:di

先進入11111目錄,再進入33333目錄,此時執行cd -就進入了11111目錄。再執行cd -就又回到了33333目錄,如此反覆。而且cd -執行後會輸出當前所在的目錄。環境變量

$ cd /home/j-tester/dir_test/1/11/111/1111/11111
$ pwd
/home/j-tester/dir_test/1/11/111/1111/11111
$ cd /home/j-tester/dir_test/3/33/333/3333/33333
$ pwd
/home/j-tester/dir_test/3/33/333/3333/33333
$ cd -
~/dir_test/1/11/111/1111/11111
$ cd -
~/dir_test/3/33/333/3333/33333
$ cd -
~/dir_test/1/11/111/1111/11111

是否是很方便?但務必注意,它只能記住上一個目錄是什麼,因此若是在兩個目錄之間切換它恰好適用。當須要在更多的目錄裏切換時,它就Hold不住了。

軟連接

linux系統下能夠建立軟連接,至關於windows下的快捷方式。

使用軟連接的方式能夠從必定程度上下降切換目錄的成本,但也有着明顯的缺點:

  1. 若是實現n個目錄的自由切換,須要建立n*(n-1)個軟連接,這樣看來,彷佛僅當n=2時工做量還能夠接受;
  2. 切換別的目錄時,還須要從新建立軟連接;
  3. 建立軟連接畢竟須要對目錄內容進行了改變,這每每不是預期的效果;

因此,介紹軟連接用於切換目錄只是提供一種思路而已。

目錄棧命令

但凡是切換目錄的場景,目錄棧命令都hold住

目錄棧命令共有三個:pushd、popd、dirs。

要想熟練使用這三個命令,首先要理解什麼是目錄棧。

目錄棧

目錄棧是用戶最近訪問過的系統目錄的列表(和環境變量DIRSTACK內容相對應),並以堆棧的形式管理,列表中的每一項都是絕對路徑

dirs

dirs命令的結果顯示當前目錄棧中的全部記錄。默認狀況下的目錄棧是當前目錄。

dirs
~
cd dir_test
dirs
~/dir_test ~

進入到dir_test目錄後執行dirs,結果首先是當前目錄,其次是進入dir_test以前的目錄棧內容。這說明了,cd dir_test的操做是除了進入目錄以外,還將dir_test這個目錄加入到了目錄棧中。目錄棧的最左端是棧頂,最右端是棧底。

用法:

dirs [+N] [-N] [-cplv]

參數說明:

+N   將第N個目錄顯示出來(從左邊棧頂數起,數字從0開始)
-N   將第N個目錄顯示出來(從右邊棧底數起,數字從0開始)
-c   刪除目錄棧中的全部記錄
-l   以完整格式顯示(默認狀況下當前用戶的根路徑用~表示)
-p   每行一個目錄來顯示目錄棧的內容
-v   每行一個目錄來顯示目錄棧的內容,每一個目錄前加上的編號,從0開始

pushd

pushd的做用是將目錄加入到目錄棧的頂部,並切換到該目錄。

不帶參數執行時,效果是互換目錄棧頂部的前兩個目錄的位置,也就實現了在棧頂的最上面兩個目錄之間切換。

用法:

pushd [-n] [+N] [-N]
pushd [-n] [dir]

參數說明:

-n   將目錄入棧時,不切換目錄
+N   將第N個目錄移至棧頂(從左邊棧頂數起,數字從0開始)
-N   將第N個目錄移至棧頂(從右邊棧底數起,數字從0開始)

popd

popd的用途是刪除目錄棧中的記錄。
不帶參數執行時將刪除目錄棧頂部的目錄,而後切換到新的棧頂元素所指向的目錄。
用法:

popd [-n] [+N] [-N]

參數說明:

+N   將第N個目錄刪除(從左邊棧頂數起,數字從0開始)
-N   將第N個目錄刪除(從右邊棧底數起,數字從0開始)
-n   將目錄出棧時,不切換目錄

三個命令都有+N和-N的參數,且規則一致,爲了不混淆,記住一個方向便可:

自頂(棧頂、左邊)向下(棧底、右邊)是正道(正號、+N)

建立別名

實際使用時還能夠爲pushd和popd設置別名,好比:

alias p1="pushd +1"
alias p2="pushd +2"
alias pp1="popd +1"
alias pp2="popd +2"

可根據本身的實際需求定製。

目錄棧命令用起來很是靈活,也很是便利。

擴展知識

  1. 快捷目錄-
  2. 軟連接
  3. 目錄棧及命令
相關文章
相關標籤/搜索