使用通配符來(lái)操作文件
通配符是bash中常用的功能,它可以幫助我們靈活地操作文件。掌握通配符對(duì)于編寫(xiě)有效的bash腳本非常重要。在bash中,最常用的通配符有以下四種: *: 表示任意長(zhǎng)度的任意字符。 ?:
通配符是bash中常用的功能,它可以幫助我們靈活地操作文件。掌握通配符對(duì)于編寫(xiě)有效的bash腳本非常重要。在bash中,最常用的通配符有以下四種:
*
: 表示任意長(zhǎng)度的任意字符。?
: 表示任意的單個(gè)字符。[]
: 表示在指定范圍內(nèi)的單個(gè)字符,例如[a-z]
表示從小寫(xiě)字母a到z中的任意一個(gè)字符。[^]
: 脫字符,表示取反,即在指定范圍以外的任意字符,例如[^0-9]
表示除了數(shù)字以外的任意字符。
下面舉幾個(gè)例子來(lái)演示如何使用通配符:
- 復(fù)制
/etc
下所有以i開(kāi)頭的文件:cp -v /etc/i* /tmp
ls /tmp - 復(fù)制
/etc
下所有以.conf
結(jié)尾的文件:cp -v /etc/*.conf /tmp
ls /tmp - 復(fù)制
/etc
下以i開(kāi)頭、以.conf
結(jié)尾的文件:cp -v /etc/i*.conf /tmp
ls /tmp - 復(fù)制
/etc
下以i開(kāi)頭、以.conf
結(jié)尾、中間包含一個(gè)任意字符的文件:cp -v /etc/i?.conf /tmp
ls /tmp - 復(fù)制
/etc
下以i開(kāi)頭、以.conf
結(jié)尾、中間包含以a、b、c、d中任意一個(gè)字母開(kāi)頭的文件:cp -v /etc/i[abcd]*.conf /tmp
ls /tmp - 復(fù)制
/etc
下以一個(gè)非數(shù)字字符和一個(gè)數(shù)字組合命名的文件:cp -v /etc/[^0-9][0-9] /tmp
ls /tmp - 復(fù)制
/etc
下以p開(kāi)頭、中間跟了任意字符,并以d結(jié)尾的文件:cp -vr /etc/p*d /tmp
ls /tmp
如果文件在/etc
的子目錄中,可以采用遞歸的方式進(jìn)行復(fù)制。
- 復(fù)制
/etc
下以p開(kāi)頭、后跟了4個(gè)任意字符、以d結(jié)尾的文件至/tmp/a
中,若a
不存在,則先創(chuàng)建a
目錄:mkdir /tmp/a; cp -vr /etc/p????d /tmp/a
ls /tmp/a - 復(fù)制
/etc
下以任意一個(gè)非數(shù)字開(kāi)頭、以數(shù)字結(jié)尾的文件至/tmp/b
中:mkdir /tmp/b; cp -vr /etc/[^0-9]*[0-9] /tmp/b
ls /tmp/b - 復(fù)制
/etc
下以非字母開(kāi)頭、后面跟了一個(gè)字母及任意長(zhǎng)度的字符文件至/tmp/c
中:mkdir /tmp/c; cp -vr /etc/[^a-zA-Z][a-zA-Z]* /tmp/c
ls /tmp/c
其他通配符
除了上述常用的通配符之外,還有一些在實(shí)際工作中經(jīng)常用到的通配符,列舉如下:
[[:digit:]]
: 表示所有的數(shù)字,相當(dāng)于0-9
。[[:lower:]]
: 表示所有的小寫(xiě)字母。[[:upper:]]
: 表示所有的大寫(xiě)字母。[[:alpha:]]
: 表示所有的字母。[[:alnum:]]
: 相當(dāng)于0-9a-z
,表示數(shù)字和小寫(xiě)字母。[[:space:]]
: 相當(dāng)于空白字符。[[:punct:]]
: 表示所有的標(biāo)點(diǎn)符號(hào)。
注意,[a-z]
和[A-Z]
其實(shí)是不區(qū)分大小寫(xiě)的,例如:
ls /etc/[a-z]*.conf ls /etc/[[:lower:]]*.conf ls /etc/[A-Z]*.conf ls /etc/[[:upper:]]*.conf
[[:alpha:]]
表示所有的字母,例如:
ls /etc/p[[:alpha:]]*.conf
[[:alnum:]]
相當(dāng)于0-9a-z
,例如:
ls /etc/p[[:alnum:]]*.conf
[[:space:]]
表示空白字符,例如:
touch /tmp/'a b' ls /tmp/[a-z][[:space:]][a-z][[:punct:]]
[[:punct:]]
表示所有的標(biāo)點(diǎn)符號(hào),例如:
touch /tmp/'a!b' ls /tmp/[[:alnum:]][[:punct:]][[:alnum:]]