如何显示名称与ls模式匹配的隐藏文件?

Jin*_*Yao 2 bash

考虑一个包含以下内容的目录.abc-dir1是一个目录.其他是文件.

abc-dir1
abc-file1
.abc-file2
def-file1
Run Code Online (Sandbox Code Playgroud)

ls -d *abc* 产生清单1:

abc-dir1  
abc-file1
Run Code Online (Sandbox Code Playgroud)

我想显示名称匹配的所有目录和文件(包括隐藏的目录和文件)*abc*.清单2是我想要的:

abc-dir1  
abc-file1
.abc-file2
Run Code Online (Sandbox Code Playgroud)

但ls -a -d *abc*仍然产生清单1.所以似乎存在*abc*覆盖-a选项的影响.有没有办法用ls显示列表2 ?

tso*_*tso 5

隐藏文件以点开头,常规文件不开头,所以:

ls -d {.,}*abc*
Run Code Online (Sandbox Code Playgroud)


che*_*ner 5

打开该dotglob选项。

$ shopt -s dotglob
$ printf '%s\n' *abc*
abc-dir1  
abc-file1
.abc-file2
Run Code Online (Sandbox Code Playgroud)

如果您确实想显示“开头” abc(带或不带首字母.)的文件,请改用扩展模式。

$ shopt -s extglob
$ printf '%s\n' ?(.)abc*
Run Code Online (Sandbox Code Playgroud)

我已经用printf来代替ls. 除非您使用一个或多个选项来ls排序、显示其他元数据等,否则无需运行外部程序来仅显示文件名。