ls 顯示目錄和檔案的技巧

2022-05-02 10:30:13 字數 2502 閱讀 2258

摘自

要列出當前目錄下所有的檔名和目錄名直接使用ls命令即可。

但如何只列出檔名而不列出目錄呢?

查遍了ls 的幫助,也沒看到有這個現成的選項。

幸好這個問題還是比較常見的,網上已經有了一些解答,但實驗之後,我發現看到的幾個鏈結給出的解決方法都是不完全正確的。具體如下。

首先,ls -l 命令可以列出如下格式的完整資訊:

drwxr-xr-x 4 junfeng junfeng 4096 2009-11-26 01:04 bin

-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35 cmakelists.txt

drwxr-xr-x 2 junfeng junfeng 4096 2009-11-26 01:06 src

可以看到,檔案和目錄的區別在於第一列是d還是-。這就需要在ls的基礎上使用grep命令來對ls輸出的每一行進行過濾。進一步使用ls -l | grep ^[^d]或者 ls -l | grep -v ^d 命令得到如下結果:

-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35 cmakelists.txt

現在目錄被過濾掉了。grep ^[^d]中,^[^d] 是乙個正規表示式,[^d]表示字串含有乙個不是d的字元,^d表示以d開頭,^[^d]表示不以d開頭。

但有時候只需要獲得檔名,需要進一步排除許可權,日期等資訊,那麼再進一步加入awk命令。

ls -l | grep ^[^d] | awk ''

結果如下:

cmakelists.txt

重新觀察之前的結果

-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35 cmakelists.txt

awk '' 中數字8的含義是第8列(列和列之間以空格符分割),也就是檔名cmakelist.txt這一部分, 

上述方法有乙個重要的漏洞,那就是使用了awk ''命令。前面提到這個命令是以空格符來判斷列和列的分隔的。那麼如果檔名中就包含空格會怎麼樣呢

繼續實驗一下。 執行touch "f ile"建立乙個名為"f ile"的檔案。注意檔名中的空格。

再重新執行

ls -l | grep ^[^d] | awk ''

結果如下:

cmakelists.txt

f

果然得到了錯誤的結果。

仔細閱讀文件,發現乙個可行而且比較簡便的方法:

ls -1 -f | grep -v [/$]

解釋如下:

ls -1 ,注意這裡是數字1,作用是單列輸出。

ls -f:根據檔案、目錄等資訊在檔名或目錄名最後給予附加資料結構,例如:

*代表可執行檔案;/代表目錄;=代表socket檔案;|代表fifo檔案;@代表連線檔案

ls的輸出:

bin cmakelists.txt f ile src

ls -1的輸出:

bin

cmakelists.txt

f ile

src

下面看ls -f的輸出

bin/ cmakelists.txt f ile src/

可見目錄項的結尾被新增了 '/' 字元。這樣便能夠簡單的區分目錄和檔案了。

而 grep -v [/$],[/$]表示式匹配的是以'/'結尾的字串,而-v選項則是排除這些匹配的字串。

最後給出linux下正確的只列出當前目錄下檔名的方法如下:

ls -1 -f | grep - v[/$]

在我們的例子中執行這個命令的輸出如下:

cmakelists.txt

f ile

1、一般情況下可使用 ls -l | grep ^d ,若只列出目錄名: ls -l | grep ^d | awk ''

2、若目錄名中有空格,可使用ls -f | grep [/$],不能寫成 ls -f | grep [*/$], [*/$]表示以*或者/結尾都可以

3、乙個最簡單的方法,使用 ls -d */,可以達到與方法2相同的效果,如 ls -d /boot | sed 's/\///g' 

sed 's/old/new/g':以行為單位進行查詢替換,注意:要刪除「/」需要使用轉義字元。

Linux 顯示目錄列表與檔案資訊(ls)

作用 用於顯示指定目錄的目錄和檔案 語法 ls 選項 目錄名 使用許可權 all 常用引數 a 列出所有檔案,包括隱藏檔案 d 表示顯示目錄自身的屬性,而不是目錄中的內容 h 當以長格式列出時,以人們可讀的格式,而不是以位元組數來顯示檔案的大小。l 以長格式顯示結果。r 以相反的順序來顯示結果。s ...

ubuntu修改ls顯示目錄的顏色

ls檢視目錄,背景是黑色的,目錄顏色是深藍色,基本看不清楚。解決辦法 因為ubuntu下的 etc 目錄裡沒有dir colors,所以費了點勁兒。2.利用dircolors命令,檢視我們的系統當前的檔名稱顯示顏色的值,然後利用管道重定向到使用者目錄下的任意乙個檔案 這裡我們建立了一 個.dirco...

treeview顯示目錄下檔案和資料夾!

procedure tform1.addtree path string parentnode ttreenode varsearchrec tsearchrec ifound integer newnode ttreenode begin ifound findfirst path faanyfi...