要只顯示隱藏的文件和目錄,最簡單的方法是使用 ls -a 顯示隱藏的文件,然后使用 grep 過濾以 . 開頭的文件。

在Linux中顯示隱藏文件很簡單,這樣使用 ls 命令即可:
這樣你就能看到被隱藏的文件,其文件名稱是以一個點 . 開頭的。
但是這樣的話,你會看到所有文件,包括隱藏的,和正常的(非隱藏)文件,都會被顯示出來。
怎樣才能只顯示隱藏的文件,而不顯示正常的文件呢?
目前沒有現成的命令可用。不過可以通過另外一種方式,比如使用管道重定向組合ls命令。
只顯示隱藏的文件和目錄
要只顯示隱藏的文件和目錄,最簡單的方法是使用 ls -a 顯示隱藏的文件,然后使用 grep 過濾以 . 開頭的文件。
^表示以 . 開頭。字符 . 需要使用反斜杠 \ 轉義,因為它屬于特殊字符。所有的內容都需要用引號包括進來。上述命令告訴 grep 只顯示以點開頭的結果。
我們來看個例子,如下是一個目錄下的正常文件:
[gliu@fedora work]$ ls -l
total 0
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 file1.txt
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 file2.txt
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 file3.txt
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 file4.txt
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 file5.txt
drwxrwxr-x. 1 gliu gliu 0 Jun 30 20:32 files
然后我對結果進行過濾,只顯示隱藏的文件和目錄:
[gliu@fedora work]$ ls -a | grep "^\."
.
..
.bash.pdf
.hiddenFiles
.hiddenfile.txt
.tmp.txt
結果中包含了一個點 . ,表示當前目錄,還有兩個點的 .. 表示父目錄。你可以使用 -A 選項來代替 -a ,這樣就可以過濾掉這兩個目錄。我們再試一次:
[gliu@fedora work]$ ls -A | grep "^\."
.bash.pdf
.hiddenFiles
.hiddenfile.txt
.tmp.txt
這樣看起來,好多了,是吧?
這樣還有一個小問題,雖然你能看到隱藏的文件,但是你無法區分它們到底是文件,還是目錄。
我們還有另外一個方法。
替代方案
以長列表的方式顯示隱藏的文件和目錄(這樣可以區分它們是文件還是目錄),可以使用如下方法:
結果如下:
[gliu@fedora work]$ ls -ld .*
drwxrwxr-x. 1 gliu gliu 188 Jun 30 20:32 .
drwxrwxr-x. 1 gliu gliu 32 May 7 14:27 ..
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 .bash.pdf
drwxrwxr-x. 1 gliu gliu 0 Jun 30 20:32 .hiddenFiles
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:29 .hiddenfile.txt
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 .tmp.txt
這是什么原理?首先 .* 是一個 shell 通配符,表示所有以 . 開頭的文件,基本上你可以這樣理解:將上述命令看成是如下語句:
ls -ld . .. .bash.pdf .hiddenFiles .hiddenfile.txt .tmp.txt
選項 d 是很重要的,它告訴 ls 命令如果有目錄的話只列出目錄名稱,而不要它的子目錄。否則的話,輸出結果會包含其子目錄中的內容。
如果你不想要列出 . 和 .. 這兩個目錄,可以使用如下命令:
注意到 .!(|.) 了吧,這是一個正則表達式。嘆號 ! 表示“非”,豎線 | 表示“或者”。(|.) 表示無或點 .。當你在前面加上一個嘆號 ! 則表示不要“無”或 . 。它們結合在一起, .!(|.) 就是一個正則表達式,表示 . 后面跟某個東西(因此可排除單點 .),但也排除后跟一個點 .(因此排除雙點 ..)。
[gliu@fedora work]$ ls -ld .!(|.)
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 .bash.pdf
drwxrwxr-x. 1 gliu gliu 0 Jun 30 20:32 .hiddenFiles
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:29 .hiddenfile.txt
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 .tmp.txt
只顯示隱藏的文件(而不要隱藏的目錄)
只顯示隱藏文件而不顯示隱藏目錄非常容易,使用如下命令:
顯示隱藏的文件和目錄,然后過濾掉以 d 開頭的條目(即目錄)。
[gliu@fedora work]$ ls -ld .* |grep -v ^d
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 .bash.pdf
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:29 .hiddenfile.txt
-rw-rw-r--. 1 gliu gliu 0 Jun 30 20:28 .tmp.txt
當然,還有其他的方法,比如使用 find 命令。如果你有別的方法,歡迎討論。