glob模式文件

  • 2019 年 10 月 5 日
  • 筆記

原文鏈接:https://blog.csdn.net/metheir/article/details/81808183

在計算機編程中,特別是類Unix環境,glob模式通過通配符來匹配文件名。例如:Unix命令,將所有以擴展名為.txt的文件從當前目錄拷貝到textfiles目錄。

1

mv *.txt textfiles/

這裡【*】是一個匹配任意數量字符基本通配符,*.txt就表示一個glob模式。另一個通用的通配符是【?】,它表示任意一個字符。

最常用的通配符是 *,?,[…]:

通配符

描述

例子

匹配

不匹配

*

匹配任意數量的字符包括空字符

Law*

Law, Laws, or Lawyer

*Law*

Law, GrokLaw, or Lawyer.

?

匹配任意一個字符

?at

Cat, cat, Bat or bat

at

[abc]

匹配任意一個包含的字符

[CB]at

Cat or Bat

cat or bat

[a-z]

匹配任意一個給定範圍的字符

Letter[0-9]

Letter0, Letter1 etc.

Letters or Letter

注意,在所有以上例子中路徑分隔符(unix的/,windows的)都不會被匹配。

在Linux和POSIX系統中[…]有以下兩個擴展:

通配符

描述

例子

匹配

不匹配

[!abc]

不匹配任意一個包含的字符

[!C]at

Bat, bat, or cat

Cat

[!a-z]

不匹配任意一個給定範圍的字符

Letter[!3-5]

Letter1, Letter2 etc.

Letter3, Letter4 or Letter5

與正則的比較:

Glob的通配符

等價正則的表達式

?

.

*

.*

Glob嘗試匹配整個字符串(例如,S*.DOC將匹配S.DOC和SA.DOC,但不匹配POST.DOC或SURREY.DOCKS),正則只匹配子串除非使用^和$。所以S*.DOC的等價正則是^S.*.DOC$。

node glob對常用通配符又做了一些擴展:

通配符

描述

例子

匹配

不匹配

**

匹配任意數量的字符包括空字符(包括路徑分隔符)

**/*.js

/a/b/c.js

!(pattern|pattern)

匹配除了()內以外的pattern

!(abc|bcd)

aaa,bbb

abc.bcd

?(pattern|pattern)

匹配至多一個()內的pattern

?(abc|bcd)

abc

bbb

+(pattern|pattern)

匹配至少一個()內的pattern

+(abc|bcd)

abc

bbb

*(pattern|pattern)

匹配任意個()內的pattern

*(abc|bcd)

abc

bbb

@(pattern|pattern)

精確匹配()內的其中一個pattern

@(abc|bcd)

abc

abd