文件名通配globbing内容及演示

globbing
  • 概述
    globbing是bash常见特性之一;Bash通过globbing来执行文件名的扩展;globbing不会使用标准的RE集(标准正则表达式),通过识别和扩展通配符来完成匹配文件名(整个文件名匹配,非部分),即元字符;globbing在解释元字符有重要的限制,且有些元字符意义和RE集里的不相同。
  • globbing中使用的元字符及意义
  1. *:匹配任意长度的任意字符
  2. ?:匹配任意单个字符
  3. []:匹配指定范围内的任意单个字符
    - 几种常见的特殊格式
    [a-z]或[A-Z]:所有字母,不区分大小写
    [0-9]:所有的数字
    [a-z0-9] :所有字母和数字
    [[:upper:]]:所有大写字母,外侧中括号表示范围的,内层中括号是固定格式
    [[:lower:]]:所有小写字母
    [[:alpha:]]:所有字母
    [[:digit:]]:所有数字
    [[:alnum:]]:所有字母和数字
    [[:space:]]:所有空白字符
    [[:punct:]]:所有标点符号
  4. [^]:匹配指定范围外的任意单个字符
  • 演示
    显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录本身
    [root@localhost ~]# ll /var     \\查看目录下符合条件的文件名称,加粗部分(lib和log目录)
    总用量 12
    drwxr-xr-x. 2 root root 19 7月 13 23:38 account
    drwxr-xr-x. 2 root root 6 11月 5 2016 adm
    drwxr-xr-x. 13 root root 159 7月 22 22:27 cache
    drwxr-xr-x. 2 root root 6 11月 7 2016 crash
    drwxr-xr-x. 3 root root 34 5月 30 06:34 db
    drwxr-xr-x. 3 root root 18 5月 30 06:34 empty
    drwxr-xr-x. 2 root root 6 11月 5 2016 games
    drwxr-xr-x. 2 root root 6 11月 5 2016 gopher
    drwxr-xr-x. 3 root root 18 5月 30 06:32 kerberos
    drwxr-xr-x. 52 root root 4096 7月 22 22:37 lib
    drwxr-xr-x. 2 root root 6 11月 5 2016 local
    lrwxrwxrwx. 1 root root 11 5月 30 06:31 lock -> ../run/lock
    drwxr-xr-x. 17 root root 4096 7月 23 00:01 log
    lrwxrwxrwx. 1 root root 10 5月 30 06:31 mail -> spool/mail
    drwxr-xr-x. 2 root root 6 11月 5 2016 nis
    drwxr-xr-x. 2 root root 6 11月 5 2016 opt
    drwxr-xr-x. 2 root root 6 11月 5 2016 preserve
    lrwxrwxrwx. 1 root root 6 5月 30 06:31 run -> ../run
    drwxr-xr-x. 12 root root 140 7月 13 23:37 spool
    drwxrwxrwt. 7 root root 4096 7月 22 22:52 tmp
    drwxr-xr-x. 2 root root 6 11月 5 2016 y
    [root@localhost ~]# ls /var/l?[[:lower:]]
    /var/lib:
    AccountsService bluetooth .....
     
    /var/log:
    anaconda cron .....
    [root@localhost ~]# ls -d /var/l?[[:lower:]]     \\加-d选项,只显示文件或目录本身
    /var/lib /var/log
    [root@localhost ~]# touch /var/ldy     \/var下没有符合条件的文件,创建文件,进行匹配演示
    [root@localhost ~]# touch /var/ldw     \/var下没有符合条件的文件,创建文件,进行匹配演示
    [root@localhost ~]# ls /var
    account adm cache crash db empty games gopher kerberos ldw ldy lib local lock log mail nis opt preserve run spool tmp yp
    [root@localhost ~]# ls -d /var/l?[[:lower:]]     \\加-d选项,只显示文件或目录(不显示其下的内容)
    /var/ldw /var/ldy /var/lib /var/log
    [root@localhost ~]# ls -dl /var/l?[[:lower:]]
    -rw-r--r--. 1 root root 0 7月 23 11:00 /var/ldw
    -rw-r--r--. 1 root root 0 7月 23 11:00 /var/ldy
    drwxr-xr-x. 52 root root 4096 7月 22 22:37 /var/lib
    drwxr-xr-x. 17 root root 4096 7月 23 00:01 /var/log
    [root@localhost ~]# ls -l /var/l?[[:lower:]]
    -rw-r--r--. 1 root root 0 7月 23 11:00 /var/ldw
    -rw-r--r--. 1 root root 0 7月 23 11:00 /var/ldy
     
    /var/lib:
    总用量 0
    drwxr-xr-x. 4 root root 32 7月 13 23:30 AccountsService
    drwxr-xr-x. 2 root root 26 7月 22 22:35 alsa
    .......
     
    /var/log:
    总用量 14716
    drwxr-xr-x. 2 root root 176 5月 30 06:41 anaconda
    drwx------. 2 root root 23 5月 30 06:49 audit
    ......
    [root@localhost ~]#

显示/etc目录下,以任意一位数字开头,且非数字结尾的文件或目录
[root@localhost mytest]# ls etc     \/etc目录下没有符合的文件,故在/tmp/mytest/etc下随便创建如下文件,进行演示
1xq1 2xq2 3xqs 44xqs 5xq. 6xl xqr
[root@localhost mytest]# ls etc/[[:digit:]][^[:digit:]]
etc/3xqs etc/44xqs etc/5xq. etc/6xl
[root@localhost mytest]# ls etc/[0-9]
[^0-9]     \\etc下全是文件就不用-d选项了
etc/3xqs etc/44xqs etc/5xq. etc/6xl


显示/etc目录下,以非字母开头,后边跟一个字母及其它任意长度字符的文件或目录
[root@localhost etc]# ls
12dy 1d12 1Dy12 dy1 m3plus
[root@localhost etc]# ls [^a-z][a-z]*
1d12 1Dy12
[root@localhost etc]# ls [^[:alpha:]][[:alpha:]]*
1d12 1Dy12
[root@localhost etc]#


复制/etc/目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mg目录
[root@localhost mytest]# ls etc     \\加粗的两个文件,不是目录
1x9d 2xq2 44xqs 4X5ds 5xq. 6xl @d8sd mi1 mi2 mi2plus mi3plus+ xqr
[root@localhost mytest]# mkdir /tmp/mg
[root@localhost mytest]# cp -vr etc/m[^0-9] /tmp/mg     \\多源复制需要确保mg是目录且存在
"etc/mi2plus" -> "/tmp/mg/mi2plus"
"etc/mi3plus+" -> "/tmp/mg/mi3plus+"
[root@localhost mytest]# ls /tmp/mg
mi2plus mi3plus+
[root@localhost mytest]# mkdir etc/m3plus     \\新建目录,测试使用
[root@localhost mytest]# ls etc
1x9d 2xq2 44xqs 4X5ds 5xq. 6xl @d8sd m3plus mi1 mi2 mi2plus mi3plus+ xqr
[root@localhost mytest]# cp etc/{mi1,mi2} etc/m3plus/     \\多源复制需要确保m3plus是目录且存在
[root@localhost mytest]# ls etc/m
[^-9]
etc/mi1 etc/mi2 etc/mi2plus etc/mi3plus+
 
etc/m3plus:
mi1 mi2
[root@localhost mytest]# cp -v etc/m[^0-9] /tmp/mg     \\没有-r选项,虽然匹配了目录,但m3plus复制失败
cp: 略过目录"etc/m3plus"
"etc/mi2plus" -> "/tmp/mg/mi2plus"
"etc/mi3plus+" -> "/tmp/mg/mi3plus+"
[root@localhost mytest]# ls /tmp/mg
mi2plus mi3plus+
[root@localhost mytest]# !rm     \\history命令历史用法,直接调用历史命令并执行
rm /tmp/mg/m

rm:是否删除普通空文件 "/tmp/mg/mi2plus"?yes
rm:是否删除普通空文件 "/tmp/mg/mi3plus+"?yes
[root@localhost mytest]# cp -vr etc/m[^0-9] /tmp/mg     \-r选项,复制目录命令成功
"etc/m3plus" -> "/tmp/mg/m3plus"
"etc/m3plus/mi1" -> "/tmp/mg/m3plus/mi1"
"etc/m3plus/mi2" -> "/tmp/mg/m3plus/mi2"
"etc/mi2plus" -> "/tmp/mg/mi2plus"
"etc/mi3plus+" -> "/tmp/mg/mi3plus+"
[root@localhost mytest]# ls /tmp/mg
m3plus mi2plus mi3plus+
[root@localhost mytest]# tree /tmp/mg
/tmp/mg
├── m3plus
│ ├── mi1
│ └── mi2
├── mi2plus
└── mi3plus+
 
1 directory, 4 files
[root@localhost mytest]# ls /tmp/mg/m
[^-9]
/tmp/mg/mi2plus /tmp/mg/mi3plus+
 
/tmp/mg/m3plus:
mi1 mi2
[root@localhost mytest]# ls -d /tmp/mg/m*[^-9]
/tmp/mg/m3plus /tmp/mg/mi2plus /tmp/mg/mi3plus+
[root@localhost mytest]#


复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录/tmp/man/目录下
[root@localhost mytest]# ls -d /usr/share/man/man*[0-9]   \\本次就只匹配出来,不进行复制操作了
/usr/share/man/man1 /usr/share/man/man4 /usr/share/man/man7
/usr/share/man/man2 /usr/share/man/man5 /usr/share/man/man8
/usr/share/man/man3 /usr/share/man/man6 /usr/share/man/man9
[root@localhost mytest]#


复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下
[root@localhost mytest]# ls /etc/[mnrp]*.conf   \\本次就只匹配出来,不进行复制操作了
/etc/man_db.conf /etc/nsswitch.conf /etc/radvd.conf /etc/rsyslog.conf
/etc/mke2fs.conf /etc/numad.conf /etc/request-key.conf
/etc/mtools.conf /etc/pbm2ppa.conf /etc/resolv.conf
/etc/nfsmount.conf /etc/pnm2ppa.conf /etc/rsyncd.conf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容