+ -
当前位置:首页 → 问答吧 → 为什么ls *.*显示不了隐藏文件

为什么ls *.*显示不了隐藏文件

时间:2009-01-21

来源:互联网

为什么ls *.*显示不了隐藏文件

讨论一下

作者: waterloo2005   发布时间: 2009-01-21

这是bash的事情, echo *.* 看看吧,都不会把"."开头的扩展开的... echo .* 却可以.

作者: bones7456   发布时间: 2009-01-21

引用:
作者: waterloo2005
为什么ls *.*显示不了隐藏文件

讨论一下
ls -a *.*应该就可以了

作者: imake   发布时间: 2009-01-21

引用:
作者: imake
ls -a *.*应该就可以了
bash 匹配 * 号必须至少一个字符。

因此 *.* 的格式要求文件名的第二个字符之后必须有一个点。但是实际上并非如此。例如 README 这个文件就根本没点。

而且 .vimrc 这样的文件,由于除了第一个点匹配了第一个*之外后面没点了,因此不能匹配 *.*

作者: poet   发布时间: 2009-01-21

引用:
作者: poet
bash 匹配 * 号必须至少一个字符。

因此 *.* 的格式要求文件名的第二个字符之后必须有一个点。但是实际上并非如此。例如 README 这个文件就根本没点。

而且 .vimrc 这样的文件,由于除了第一个点匹配了第一个*之外后面没点了,因此不能匹配 *.*
错了:
代码:
$ touch 123
$ ls *.*
ls: 无法访问 *.*: 没有那个文件或目录
$ ls *123*
123
$ ls 123*
123
$

作者: bones7456   发布时间: 2009-01-21

引用:
作者: bones7456
错了:
代码:
$ touch 123
$ ls *.*
ls: 无法访问 *.*: 没有那个文件或目录
$ ls *123*
123
$ ls 123*
123
$
看来你的实验是对的,那么,你怎么解释 ls -a *.* 不能匹配 .vimrc 这样的文件呢?

作者: poet   发布时间: 2009-01-22

引用:
作者: bones7456
这是bash的事情, echo *.* 看看吧,都不会把"."开头的扩展开的... echo .* 却可以.
但ls .*会把第二层目录的东西列出来

作者: crccw   发布时间: 2009-01-22

引用:
作者: poet
看来你的实验是对的,那么,你怎么解释 ls -a *.* 不能匹配 .vimrc 这样的文件呢?
我猜这是shell做的特殊处理,没有完全按照正则的规律来的,

作者: bones7456   发布时间: 2009-01-22

引用:
作者: crccw
但ls .*会把第二层目录的东西列出来
如果 .* 匹配到目录名的话,ls 一个目录,自然会列出目录里面的内容啊.不想这样的话,要用 ls -d

作者: bones7456   发布时间: 2009-01-22

引用:
作者: bones7456
我猜这是shell做的特殊处理,没有完全按照正则的规律来的,
这应该不是正则吧

作者: crccw   发布时间: 2009-01-22

通配符

//补充发文长度。

作者: hezhit   发布时间: 2009-01-22

引用:
作者: bones7456
我猜这是shell做的特殊处理,没有完全按照正则的规律来的,
同意
“通配符是不匹配以圆点开始的文件名的。“────《Unix Power Tool》

作者: crccw   发布时间: 2009-01-22

*可以匹配0个字符,但是默认情况下,shell不匹配以点开头的字符。bash里可以用shopt -s dotglob改变这个行为

作者: richardpku   发布时间: 2009-01-23