tcl/tk參考——系統相關glob

Augusdi發表於2015-12-15

名稱

glob - 返回模式匹配的檔名

語法

glob ?switchespattern ?pattern ...?

描述

 這個命令返回一個匹配pattern變元的檔案列表,返回的列表並不排序,如果需要排序就需要呼叫lsort命令。

如果初始變元使用-開頭,就作為標誌出現,以下所述是目前支援的標誌位:

-directory directory
在給定的資料夾中尋找匹配的檔案,允許在資料夾中尋找包含通配風格字元的檔案,這個標誌位不能和-path一起使用
-join
剩下的pattern變元被認為是一個路徑名的各個部分,將會被組合起來,類似於file join命令的方式
-nocomplain
允許返回一個空列表而不是錯誤,如果沒有這個標誌位當尋找不到與模式匹配的檔案時就返回一個錯誤
-path pathPrefix
尋找以pathPrefix開頭、其它部分匹配給定模式的檔案,這種模式允許在pathPrefix中出現glob敏感的匹配字元,不能夠和-directory一起使用。例如,尋找所有包含相同$path根名字但是不同副檔名的檔案,需要使用命令glob -path [file rootname $path] .*,這個命令中的$path允許包含glob敏感的匹配字元
-tails
只返回檔案的檔名而不是包含整個路徑的檔名,需要和-directory-path一起使用。glob -tails -directory $dir *這個命令和set pwd [pwd]; cd $dir ; glob *; cd $pwd這一系列命令的執行結果是相同的,對於-path,返回的檔名是包含整個檔名的,所以glob -tails -path [file rootname ~/foo] .*將返回形如foo.aux foo.bib foo.tex的檔案而不是形如.aux .bib .tex的檔案。
-types typeList

只有列出匹配typeList的檔案或資料夾,typeList有兩種形式。

 
第一種形式就像Unix搜尋命名中的-type可選項,b塊檔案,c字元檔案,d資料夾,f普通檔案,l軟連結,p命名管道,s套接字,可以有多個-type選項一起使用。glob命令返回至少匹配一種型別的所有的檔案。注意,如果指定了-type l或者連結的目標檔案匹配都會返回軟連結檔案,所以在指定-types d時一個資料夾的軟連結也會返回。

第二種形式指定的型別必須是所有的型別都匹配,rwx作為檔案存取屬性,readonlyhidden可以是特殊的存取屬性。在Macintosh上,MacOS型別和建立者也是支援的。像{macintosh type XXXX}或{macintosh creator XXXX} 將匹配檔案型別和建立者。

這兩種形式可以混合使用,所以-type {d f r w}將尋找有可讀和可寫許可權的普通檔案和資料夾。下面兩個命令是等價的:

glob -type d *
glob */
第一種方式不會返回"/"並且是和作業系統無關的。
--
標誌位結束符號。在它之後的變元都將被當作是pattern

pattern變元可以包含任何以下特殊字元:

?
匹配任何一個字元
*
匹配0個或多個任何字元
[chars]
匹配chars中的任何一個字元,如果chars包含一個a-b的形式,那麼是a-b當中的任何一個字元(包括a和b)
/x
匹配字元x
{a,b,...}
匹配a、b……中的任意一個字串

在Unix的csh中,以.開頭或者包含/的檔名必須正確匹配或者在{}中,除非-type hidden指定了(因為以.開頭的檔案為隱藏檔案)。在其它作業系統中,以.開頭的檔案沒有什麼特殊,但是檔名為.或者..時必須明確匹配。所有的/字元必須明確匹配。

如果在pattern中第一個字元為~,就引用主目錄,如果~後面為/那麼就會使用HOME環境變數。

glob命令與csh不同,第一,它不會排列返回的結果;第二,glob只返回實際存在的檔名。

示例

搜尋當前目錄下的所有的Tcl檔案:

glob *.tcl

在使用者主目錄中搜尋所有的Tcl檔案:

glob -directory ~ *.tcl

搜尋當前目錄下的所有的子目錄:

glob -type d *

搜尋包含字串"a","b"和"cde"的檔案:

glob -type f *{a,b,cde}*

 

相關文章