使用Glob和目錄
來源:教育資源網(wǎng)
?
發(fā)布時間:2020-11-28 08:00:24
?
點(diǎn)擊:560
"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'字符。在球形中,它將匹配字符串a1或a2。其他模式可以嵌套在此構(gòu)造內(nèi)部。
有一點(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']螃蟹小知識