高级Linux运维工程师养成记-文件通配符

高级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
上一篇:centos7.6 python3安装过程


下一篇:自适应中overflow的作用