高级Linux运维工程师养成记-文件通配符
高级Linux运维工程师养成记文件通配符
在有些应用场景下,管理文件需要使用通配符来匹配文件名。
-
*
表示匹配0个或则多个字符(不包含隐藏文件) - ?表示任意的单个字符
- ~ 当前用户的家目录
- ~- 前一个工作目录
- [0-9] 匹配数字范围
- [a-z] 匹配字母
- [A-Z] 匹配字母
- [guanglei] 匹配列表中的任意一个字母
- [^guanglei] 排除列表中的任意一个字母
查看以.txt结尾的文件
*
不包含隐藏文件
[root@centos8 data]# touch guanglei.txt
[root@centos8 data]# touch TEST.txt
[root@centos8 data]# touch .txt
[root@centos8 data]# ll *.txt
-rw-r--r-- 1 root root 0 Aug 5 05:53 guanglei.txt
-rw-r--r-- 1 root root 0 Aug 5 05:53 TEST.txt
查看以file开头的任意0个或则多个字符并且以.log结尾的文件
[root@centos8 data]# touch file{1..10}.log
[root@centos8 data]# ll
total 4
-rw-r--r-- 1 root root 0 Aug 1 19:21 file10.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file1.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file2.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file3.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file4.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file5.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file6.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file7.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file8.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file9.log
-rw-r--r-- 1 root root 0 Aug 1 19:20 guanglei.txt
-rw-r--r--. 1 guanglei root 1 Aug 1 18:20 TEST.txt
[root@centos8 data]# ll file*.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file10.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file1.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file2.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file3.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file4.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file5.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file6.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file7.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file8.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file9.log
显示file后面跟着任意一个字符的文件,文件名以.log结尾
排除了file10.log
[root@centos8 data]# ll file?.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file1.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file2.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file3.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file4.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file5.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file6.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file7.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file8.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file9.log
查看指定字符数量的文件
[root@centos8 data]# touch TEST
[root@centos8 data]# ll ????
-rw-r--r-- 1 root root 0 Aug 5 05:59 TEST
查看前一个工作目录的文件列表
前一个工作目录在/data目录下
[root@centos8 data]# cd
[root@centos8 ~]# ls ~-
file10.log file2.log file4.log file6.log file8.log guanglei.txt TEST.txt
file1.log file3.log file5.log file7.log file9.log TEST
查看包含file和指定数字(1,2,3,4,5)的文件信息
[root@centos8 data]# ll file[1-5]*
-rw-r--r-- 1 root root 0 Aug 1 19:21 file10.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file1.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file2.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file3.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file4.log
-rw-r--r-- 1 root root 0 Aug 1 19:21 file5.log
查看匹配列表中匹配任意一个字符的文件信息
即查看fileG.html,fileU.html,fileA.html,fileN.html,fileG.html,fileL.html,fileE.html,fileI.html的文件信息
[root@centos8 data]# touch /data/file{A..Z}.html
[root@centos8 data]# ll /data/file[GUAGNLEI].html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileA.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileE.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileG.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileI.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileL.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileN.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileU.html
查看匹配列表中不包含指定的任意一个字符的文件信息
即查看不是fileG.html,fileU.html,fileA.html,fileN.html,fileG.html,fileL.html,fileE.html,fileI.html的文件信息
[root@centos8 data]# ll /data/file[^GUANGLEI].html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileB.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileC.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileD.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileF.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileH.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileJ.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileK.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileM.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileO.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileP.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileQ.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileR.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileS.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileT.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileV.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileW.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileX.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileY.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileZ.html
查看包含指定区间的文件名
a-c包含了a-c之间的大写字母,但是不显示大写的C
[root@centos8 data]# touch /data/file{a..z}.html
[root@centos8 data]# ls /data/file[a-c].html
/data/filea.html /data/fileA.html /data/fileb.html /data/fileB.html /data/filec.html
文件通配符还有一些常用的预定义的字符类,可以使用命令 man 7glob
查看
- [:digit:] 表示匹配任意数字,等价于0-9
- [:lower:] 表示匹配任意小写字母,等价于a-z
- [:upper:] 表示匹配任意大写字母,等价于A-Z
- [:alpha:] 表示匹配任意大小写字母
- [:alnum:] 表示匹配任意数字或字母
- [:blank:]表示匹配水平空白字符
- [:space:] 表示匹配水平或者空白字符
- [:punct:] 表示匹配标点符号
- [:print:] 表示匹配可打印字符
- [:cntrl:] 表示匹配控制(非打印)字符
- [:graph:]表示匹配图形字符
- [:xdigit:] 表示匹配十六进制字符
显示以file开头的所有小写字母的文件名
[root@centos8 data]# ll /data/file[[:lower:]].html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filea.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/fileb.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filec.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filed.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filee.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filef.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/fileg.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/fileh.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filei.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filej.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filek.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filel.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filem.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filen.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/fileo.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filep.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/fileq.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filer.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/files.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filet.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/fileu.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filev.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filew.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filex.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filey.html
-rw-r--r-- 1 root root 0 Aug 5 06:09 /data/filez.html
显示以file开头的所有大写字母的文件名
[root@centos8 data]# ll /data/file[[:upper:]].html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileA.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileB.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileC.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileD.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileE.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileF.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileG.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileH.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileI.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileJ.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileK.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileL.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileM.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileN.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileO.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileP.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileQ.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileR.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileS.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileT.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileU.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileV.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileW.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileX.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileY.html
-rw-r--r-- 1 root root 0 Aug 5 06:06 /data/fileZ.html
系统中内置了别名l.,其含义是列出当前目录的隐藏文件
[root@centos8 data]# alias l.
alias l.='ls -d .* --color=auto'
加上目录就能查看指定目录的隐藏文件
[root@centos8 data]# ls -d /data/.*
/data/. /data/.. /data/.txt
列出指定目录的文件夹
[root@centos7 ~]# ls -d /*
通配符的综合案例
1.显示/dta目录下所有以a开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
[root@centos8 data]# touch a9j
[root@centos8 data]# ll /data/a*[[:digit:]]*[[:lower:]]
-rw-r--r-- 1 root root 0 Aug 5 06:49 /data/a9j
2.显示/data目录下以任意一位数字开头,且以非数字结尾的文件或目录
[root@centos8 data]# ll /data/[[:digit:]]*[^[:digit:]]
-rw-r--r-- 1 root root 0 Aug 5 06:45 /data/1mxx
3.显示/data目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
[root@centos8 data]# touch 1mxx
[root@centos8 data]# ll /data/[^[:alpha:]][[:alpha:]]*
-rw-r--r-- 1 root root 0 Aug 5 06:45 /data/1mxx
4.显示/data目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
[root@centos8 data]# mkdir rc01
[root@centos8 data]# ll -d /data/rc[0-6]*
drwxr-xr-x 2 root root 6 Aug 5 06:40 /data/rc01