1

在Linux中,怎样只显示隐藏文件?

 1 year ago
source link: https://www.51cto.com/article/721944.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在Linux中,怎样只显示隐藏文件?

作者:刘光录 2022-11-03 10:36:30
要只显示隐藏的文件和目录,最简单的方法是使用 ls -a 显示隐藏的文件,然后使用 grep 过滤以 . 开头的文件。
78af7f4371c6fa1cf5c833e1bb9da5c8e5b01e.jpg

在Linux中显示隐藏文件很简单,这样使用 ls 命令即可:  

ls -a

这样你就能看到被隐藏的文件,其文件名称是以一个点 . 开头的。

但是这样的话,你会看到所有文件,包括隐藏的,和正常的(非隐藏)文件,都会被显示出来。

怎样才能只显示隐藏的文件,而不显示正常的文件呢?

目前没有现成的命令可用。不过可以通过另外一种方式,比如使用管道重定向组合ls命令。

只显示隐藏的文件和目录

要只显示隐藏的文件和目录,最简单的方法是使用 ls -a 显示隐藏的文件,然后使用 grep 过滤以 .  开头的文件。

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

这样看起来,好多了,是吧?

这样还有一个小问题,虽然你能看到隐藏的文件,但是你无法区分它们到底是文件,还是目录。

我们还有另外一个方法。

以长列表的方式显示隐藏的文件和目录(这样可以区分它们是文件还是目录),可以使用如下方法:

ls -ld .*

结果如下:

[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 命令如果有目录的话只列出目录名称,而不要它的子目录。否则的话,输出结果会包含其子目录中的内容。

如果你不想要列出 . 和 .. 这两个目录,可以使用如下命令:

ls -ld .!(|.)

注意到 .!(|.) 了吧,这是一个正则表达式。叹号 ! 表示“非”,竖线 | 表示“或者”。(|.) 表示无或点 .。当你在前面加上一个叹号 ! 则表示不要“无”或 . 。它们结合在一起, .!(|.) 就是一个正则表达式,表示 . 后面跟某个东西(因此可排除单点 .),但也排除后跟一个点 .(因此排除双点 ..)。

[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

只显示隐藏的文件(而不要隐藏的目录)

只显示隐藏文件而不显示隐藏目录非常容易,使用如下命令:

ls -ld .* |grep -v ^d

显示隐藏的文件和目录,然后过滤掉以 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 命令。如果你有别的方法,欢迎讨论。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK