使用Glob和目錄

"Globing"文件(帶有Dir.glob )在Ruby中允許您僅選擇給定目錄中所需的文件,例如所有XML文件。即使Dir.blog正則表達(dá)式,不是。與Ruby's正則表達(dá)式相比,它非常有限,并且與shell擴(kuò)展通配符更密切相關(guān)。

與Globing相反,迭代目錄中的所有文件,可以使用Dir.foreach 方法。

示例

以下glob將匹配當(dāng)前目錄中以.rb結(jié)尾的所有文件。它使用單個通配符,星號。星號將匹配零個或多個字符,因此任何以.rb結(jié)尾的文件都將匹配此glob,包括一個名為simply.rb的文件,在文件擴(kuò)展名之前沒有任何內(nèi)容。它的前一段。glob方法將返回所有與globbing規(guī)則匹配的文件作為數(shù)組,這些文件可以保存以備后用或迭代。

#!/usr/bin/env ruby


Dir.glob('*.rb')。每個do | f |

放置f

結(jié)束

通配符和更多

只有少數(shù)通配符需要學(xué)習(xí):

  • *–匹配零個或更多字符。僅包含星號且沒有其他字符或通配符的全局將與當(dāng)前目錄中的所有文件匹配。如果沒有更多字符來縮小搜索范圍,則星號通常與文件擴(kuò)展名組合。
  • **–遞歸匹配所有目錄。這用于下降到目錄樹并查找當(dāng)前目錄子目錄中的所有文件,而不僅僅是當(dāng)前目錄中的文件。在下面的示例代碼中探索了此通配符。
  • ?–匹配任何一個字符。這對于查找名稱為特定格式的文件很有用。例如,可以表達(dá)5個字符和一個.xml擴(kuò)展名如?????。xml。
  • [a-z]–匹配字符集中的任何字符。該集合可以是字符列表,也可以是用連字符分隔的范圍。字符集遵循與正則表達(dá)式中的字符集相同的語法,并且其行為方式與正則表達(dá)式中的字符集相同。
  • {a,b}–匹配模式a或b。盡管這看起來像正則表達(dá)式量詞,它不是't.例如,在正則表達(dá)式中,模式a{1,2}將匹配1或2'a'字符。在球形中,它將匹配字符串a1a2。其他模式可以嵌套在此構(gòu)造內(nèi)部。

教育資源網(wǎng)_1

有一點(diǎn)需要考慮的是案例敏感性。它'由操作系統(tǒng)決定是否TEST.txtandTeSt.TxT參考相同的文件。在Linux和其他系統(tǒng)上,這些是不同的文件。在Windows上,這些將引用相同的文件。

操作系統(tǒng)還負(fù)責(zé)顯示結(jié)果的順序。例如,如果您're在Windows和Linux上可能會有所不同。

最后要注意的是Dir[globstring]便利方法。這在功能上與106相同Dir.glob(globstring)并且在語義上也是正確的(您正在索引目錄,就像數(shù)組一樣)。因此,您可能會看到Dir[]更頻繁Dir.glob,但他們是一樣的。

使用通配符的示例

以下示例程序?qū)⒁远喾N不同的組合演示盡可能多的模式。

#!/usr/bin/env-ruby


#獲取所有.xml文件

Dir['*.xml']


#獲取具有5個字符的所有文件和.jpg擴(kuò)展名

Dir['?????。jpg']


#獲取所有jpg,png和gif圖像

Dir['*。{jpg、 png,gif}']


#下降到目錄樹并獲得所有jpg圖像

#注意:這也將文件當(dāng)前目錄中的jpg圖像

Dir['**/*.jpg']


#?從Uni開始下降到所有目錄,并查找所有

35; jpg圖像。

35;注意:這只下降到一個目錄

Dir[&\\#39;Uni**/*.jpg \35;#39;]


\####下降到所有目錄目錄中,并下降到所有目錄中,都進(jìn)入所有從Uni開始,所有

#子目錄目錄以Uni開始并查找

#all.jpg圖像

Dir['Uni**/**/*.jpg']

螃蟹小知識