在 Linux 中仅显示隐藏文件
在 Linux 中显示隐藏文件非常简单。您可以按以下方式使用 ls 命令:
ls -a
没问题。您可以看到名称以点 (.) 开头的隐藏文件。
但是您可以看到当前目录中的所有文件,包括隐藏文件和常规文件。
如果您只想查看隐藏文件而不查看常规文件,该怎么办?
-a
没有像和那样的现成选项-A
。但是,你总能找到一种方法,通过奇妙的管道重定向将几个命令组合起来,实现目标。
仅显示隐藏的文件和目录
要仅显示隐藏文件和目录,最简单的方法是使用 ls -a 显示隐藏文件,然后使用 grep仅过滤以 .(点)开头的条目。
ls -a | grep "^\."
^ 表示“以...开头”。点字符需要用 \ 进行转义,由于您使用了特殊字符,因此所有内容都括在双引号中。使用“^\.”,您可以告诉grep 命令仅显示以点开头的结果。
让我分享一个例子。这是我的示例目录的内容:
abhishek@itsfoss:~/toto$ ls -l
total 352
-rw-rw-r-- 1 abhishek abhishek 45443 May 24 09:03 apt-get.pdf
-rw-rw-r-- 1 abhishek abhishek 29983 May 27 16:07 bash.pdf
-rw-rw-r-- 1 abhishek abhishek 249773 May 26 14:56 cronjob-cheatsheet.png
-rw-rw-r-- 1 abhishek abhishek 4943 Jun 2 20:09 gnome-console-voiceover
-rw-rw-r-- 1 abhishek abhishek 12721 May 29 12:29 members.2022-05-29.csv
-rw-rw-r-- 1 abhishek abhishek 143 May 30 12:06 routes.yaml
现在我要将其过滤掉,以便只显示隐藏的文件和目录:
abhishek@itsfoss:~/toto$ ls -a | grep "^\."
.
..
.hidden-file
.hid_dir
.member.csv
-A
它还显示特殊的 .(当前目录)和 ..(父目录)目录。您可以使用选项而不是 来过滤它们-a
。
abhishek@itsfoss:~/toto$ ls -A | grep "^\."
.hidden-file
.hid_dir
.member.csv
这样是不是好多了?如果你想在一张图片中看到它们,可以看下面的截图:
这里还是有点问题,虽然你能在一行中看到它们,但是你无法区分它们是文件还是目录。
如果您想要这个,还有另一种方法可以实现。
替代方法
为了以长列表格式仅显示隐藏的文件和目录(以便您可以看到它是文件还是目录),您可以使用以下命令:
ls -ld .*
此处的示例将显示以下结果:
drwxrwxr-x 3 abhishek abhishek 4096 Jun 30 10:38 .
drwxr-x--- 28 abhishek abhishek 4096 Jun 29 15:15 ..
-rw-rw-r-- 1 abhishek abhishek 41145 May 27 15:24 .hidden-file
drwxrwxr-x 2 abhishek abhishek 4096 Jun 30 10:38 .hid_dir
-rw-rw-r-- 1 abhishek abhishek 12721 Jun 3 09:41 .member.csv
它是如何工作的?首先,.* 部分是 shell 通配符。它会在输入时立即展开。因此,基本上,您可以将其视为:
ls -ld . .. .hidden-file .hid_dir .member.csv
此处选项的使用-d
很重要。它告诉 ls 仅列出目录,而不列出其内容。否则,ls 命令还会显示 的内容.hid_dir
。
如果您不想显示 . 和 .. 目录,您可以使用如下 ls 命令:
ls -ld .!(|.)
显然,重点是.!(|.)
部分。这是一个模式。 ! 是否定,| 是或条件。(|.)
表示无或点。当您用 ! 否定它时,您是在说它不应该是“无”或点。将它们组合在一起.!(|.)
,您是在说一个模式,其中 . 后面跟着某个东西(因此排除单个点),除了另一个点(因此排除双点)。
您现在得到了所需的结果:
-rw-rw-r-- 1 abhishek abhishek 41145 May 27 15:24 .hidden-file
drwxrwxr-x 2 abhishek abhishek 4096 Jun 30 10:38 .hid_dir
-rw-rw-r-- 1 abhishek abhishek 12721 Jun 3 09:41 .member.csv
仅显示隐藏文件(不显示隐藏目录)
只显示隐藏文件而不显示隐藏目录非常简单。使用以下命令:
ls -ld .* |grep -v ^d
您正在显示隐藏的文件和目录,然后过滤掉以 d 开头的条目(即目录)。
abhishek@itsfoss:~/toto$ ls -ld .*
drwxrwxr-x 3 abhishek abhishek 4096 Jun 30 10:38 .
drwxr-x--- 28 abhishek abhishek 4096 Jun 29 15:15 ..
-rw-rw-r-- 1 abhishek abhishek 41145 May 27 15:24 .hidden-file
drwxrwxr-x 2 abhishek abhishek 4096 Jun 30 10:38 .hid_dir
-rw-rw-r-- 1 abhishek abhishek 12721 Jun 3 09:41 .member.csv
abhishek@itsfoss:~/toto$ ls -ld .* |grep -v ^d
-rw-rw-r-- 1 abhishek abhishek 41145 May 27 15:24 .hidden-file
-rw-rw-r-- 1 abhishek abhishek 12721 Jun 3 09:41 .member.csv
当然,可能还有其他几种可能的方法。find 命令总是用于这类事情。
如果您能想到不同的解决方案,请在评论部分分享。