1. 程式人生 > 實用技巧 >高階Linux運維工程師養成記-檔案萬用字元

高階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