正常查看所有文件命令,-a表示可以查看隐藏文件

ls -a

通过查找命令,过滤出点开头的文件

grep "^\..*"

其中,^\. 表示以点开头,因为点在Linux中是特殊字符(需要反斜杠转义),表示任意某个字符,必须要匹配一个字符,空格也行,空格也表示一个字符,但是不能是空, * 表示某字符匹配0次或者多次,.* 连在一起就表示任意长度的字符

如果少了一个点是^\.* ,表示转义后的点符号匹配0次或多次,所以是不能只查出点开头的文件

正确命令是: ls -a | grep “^\..*”

但是如果想以长列表的格式输出呢,加个-l选项么?

经过测试 ls -al | grep “^\..*” 没有任何输出,原因是 ls -al 通过管道传过去的是长列表格式,每行数据不只是文件名,还有文件权限,属主,大小,时间等信息,就不能以上面的条件进行过滤了

通过观察长列表格式,点开头的文件都有时间参数,“数字+空格+点”这个格式就能匹配出点开头的文件

正确命令是:ls -al | grep “[0-9] \.”

但是这里有个小缺陷,如果文件中有data123 .log类似于这样格式的文件,那上面的命令就失效了

再来介绍个利用gawk进行过滤的方法

前面还是ls -al 通过管道传递输出给gawk

gawk逐行处理数据,默认以空格为分隔符,对每行进行切割,用$1取第一个字段,$2取第二个字段,以此类推,$0 表示本行的原数据,我们只要匹配文件名对应的 $9 字段即可,$9 ~ /^\./ 其中~表示精确匹配,篇幅有限,关于gawk其他的语法格式不再赘述

正确的命令是: ls -al | gawk ’ $9 ~ /^\./{print $0}’

菜鸟手书,欢迎指正

Logo

更多推荐