如何切換目錄 Linux下如何高效切換目錄?

2021-10-14 19:38:03 字數 4365 閱讀 1084

linux 下對於目錄的切換,大家肯定會想到乙個命令:cd命令。這個是 linux 下再基本不過的命令,如果這個命令都不知道的話,趕緊剖腹自盡去吧。

cd 命令確實很方便,但如果需要頻繁在下面的目錄切換,你可能要懷疑人生了:

/home/alvin/projects/blogdemos/linux-system-programming/thread

/home/alvin/projects/blogdemos/diff

/home/harry/study/日本文化/中日交流/影視業/動作片

如果只會 cd 命令的話,那麼就需要不停地 cd ,直到你發瘋。

這三個命令其實都是對目錄棧進行操作,而目錄棧就是乙個儲存目錄的棧結構,該棧結構的頂端永遠都存放著當前目錄(敲黑板了,重點!!)。

有程式設計基礎的同學都知道,都是遵循著後進先出的原則。也就是說,在棧結構裡,後面進棧的元素,將先出棧。

複習完基本概念,我們再來詳細這三個命令。

顯示目錄棧內容:dirs

首先是dirs。這個命令很簡單,就是顯示目錄棧的內容。它有以下三個常用選項:

選項 含義 -p 每行顯示一條記錄 -v 每行顯示一條記錄,同時展示該記錄在棧中的index -c 清空目錄棧

其中,-p-v選項的區別是,-v選項將顯示每條記錄在棧中的索引,除此之外完全一樣。假如現在有乙個目錄棧,我們來看看它裡面有啥內容:

[alvin@vm_0_16_centos dir2]$ pwd

/home/alvin/test/dir2

[alvin@vm_0_16_centos dir2]$ dirs -v

0 ~/test/dir2

1 ~/test/dir1

2 ~/test/dir3

3 ~/test

請注意,最頂部的元素永遠跟當前目錄一致,如果你在其它目錄下檢視目錄棧,第乙個元素將對應發生改變。同理,如果你用後文介紹的pushdpopd來操作目錄棧的話,當前目錄將切換到目錄棧的第乙個元素對應位址。

如果我們要清空目錄棧,直接使用-c選項即可。

[alvin@vm_0_16_centos diff]$ dirs -c

[alvin@vm_0_16_centos diff]$ dirs -v

0 ~/projects/blogdemos/diff

壓入目錄棧:pushd

每次 pushd 命令執行完成之後,預設都會執行乙個 dirs 命令來顯示目錄棧的內容。pushd 的用法主要有如下幾種:

1. pushd + 目錄

pushd 後面如果直接跟目錄使用,會切換到該目錄並且將該目錄置於目錄棧的棧頂。例子:

[alvin@vm_0_16_centos test]$ pushd dir1

~/test/dir1 ~/test

[alvin@vm_0_16_centos dir1]$ pushd ../dir2

~/test/dir2 ~/test/dir1 ~/test

[alvin@vm_0_16_centos dir2]$ pushd ../dir3

~/test/dir3 ~/test/dir2 ~/test/dir1 ~/test

[alvin@vm_0_16_centos dir3]$ dirs -v

0 ~/test/dir3

1 ~/test/dir2

2 ~/test/dir1

3 ~/test

2. pushd (不帶任何引數)

pushd 不帶任何引數執行的效果就是,將目錄棧最頂層的兩個目錄進行交換。前面我們已經強調過,目錄棧第乙個元素與當前目錄是相關的,所以第乙個元素發生改變時,當前目錄將對應切換,反之亦然。

[alvin@vm_0_16_centos dir3]$ dirs -v

0 ~/test/dir3

1 ~/test/dir2

2 ~/test/dir1

3 ~/test

[alvin@vm_0_16_centos dir3]$ pwd

/home/alvin/test/dir3

[alvin@vm_0_16_centos dir3]$ pushd

~/test/dir2 ~/test/dir3 ~/test/dir1 ~/test

[alvin@vm_0_16_centos dir2]$ pwd

/home/alvin/test/dir2 #對應目錄發生改變

[alvin@vm_0_16_centos dir2]$ dirs -v

0 ~/test/dir2

1 ~/test/dir3 #索引 0 和 1 的內容對調

2 ~/test/dir1

3 ~/test

*3. pushd +/-n *

pushd +/-n 就是直接切換到對應索引值的目錄。注意,這裡既可以用加號,也可以用減號。如果是加號的話,將從目錄棧由上往下數,而用減號的話,將從目錄棧由下往上數。

接下來就回到了我們本文開頭的問題,如果我們要在兩個或多個路徑很長的目錄之間頻繁切換,該如何操作?

首先,我們用pushd + 目錄的方式將這幾個路徑新增到目錄棧中;

然後,再用pushd +/-n在不同的目錄間快速切換。具體演示如下:

[alvin@vm_0_16_centos dir2]$ pwd

/home/alvin/test/dir2

[alvin@vm_0_16_centos dir2]$ dirs -v

0 ~/test/dir2

1 ~/test/dir3

2 ~/test/dir1

3 ~/test

[alvin@vm_0_16_centos dir2]$ pushd +2

~/test/dir1 ~/test ~/test/dir2 ~/test/dir3

[alvin@vm_0_16_centos dir1]$ pwd

/home/alvin/test/dir1

[alvin@vm_0_16_centos dir1]$ dirs -v

0 ~/test/dir1

1 ~/test

2 ~/test/dir2

3 ~/test/dir3

彈出目錄棧:popd

每次 popd 命令執行完成之後,預設都會執行乙個 dirs 命令來顯示目錄棧的內容。popd 的用法主要有如下幾種:

1. popd (不帶任何引數)

popd不帶任何引數執行的效果,就是將目錄棧中的棧頂元素出棧。這時,棧頂元素發生變化,自然當前目錄也會發生相應的切換。

[alvin@vm_0_16_centos dir3]$ dirs -v

0 ~/test/dir3

1 ~/test/dir1

2 ~/test

3 ~/test/dir2

[alvin@vm_0_16_centos dir3]$ popd

~/test/dir1 ~/test ~/test/dir2

[alvin@vm_0_16_centos dir1]$ dirs -v

0 ~/test/dir1

1 ~/test

2 ~/test/dir2

2. popd +/-n

將目錄棧中的第n個元素刪除。同樣的,加減號表示從上往下數,還是從下往上數。

[alvin@vm_0_16_centos dir1]$ dirs -v

0 ~/test/dir1

1 ~/test

2 ~/test/dir2

[alvin@vm_0_16_centos dir1]$ popd +1

~/test/dir1 ~/test/dir2

[alvin@vm_0_16_centos dir1]$ dirs -v

0 ~/test/dir1

1 ~/test/dir2

Linux下如何高效切換目錄?

linux 下對於目錄的切換,大家肯定會想到乙個命令 cd命令。這個是 linux 下再基本不過的命令,如果這個命令都不知道的話,趕緊剖腹自盡去吧。cd 命令確實很方便,但如果需要頻繁在下面的目錄切換,你可能要懷疑人生了 home alvin projects blogdemos linux sys...

關於如何快速切換目錄 Linux

想跟大家分享一下,很多人剛開始用linux 的 cli時,最不習慣的一點就是目錄的切換要一直cd來cd去,其實這樣無形中浪費了很多時間,因為根據英國研究 大誤 linux cli的操作者80 會進入的目錄可能集中在全部目錄的2 而已,所以推薦大家乙個工具 那就是 autojump 迷之聲 好像很久很...

linux下如何刪除目錄

在linux中刪除乙個目錄很簡單,很多人還是習慣用rmdir,不過一旦目錄非空,就陷入深深的苦惱之中,現在使用rm rf命令即可解決。直接rm就可以了,不過要加兩個引數 rf 即 rm rf 目錄名字 r 就是向下遞迴,不管有多少級目錄,一併刪除 f 就是直接強行刪除,不作任何提示的意思 刪除資料夾...