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

.

.

名稱

glob - 返回模式匹配的文件名

語法

glob ?switches? pattern ?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}*

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章