使用Glob和目錄

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

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

示例

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

#!/usr/bin/env ruby


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

放置f

結束

通配符和更多

只有少數通配符需要學習:

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

教育資源網_1

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

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

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

使用通配符的示例

以下示例程序將以多種不同的組合演示盡可能多的模式。

#!/usr/bin/env-ruby


#獲取所有.xml文件

Dir['*.xml']


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

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


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

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


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

#注意:這也將文件當前目錄中的jpg圖像

Dir['**/*.jpg']


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

35; jpg圖像。

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

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


\####下降到所有目錄目錄中,并下降到所有目錄中,都進入所有從Uni開始,所有

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

#all.jpg圖像

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

螃蟹小知識