2015-09-23 68 views
7

如果我想獲得的所有的CSS和JavaScript文件如何執行Dir.glob但排除目錄?

Dir.glob("dir/**/*.{css,js}) 

給我的東西,我不想,如果有一個名爲stupidfolder.js文件夾。我只是改變文件夾的名稱,但我不能。

+0

你不解釋你想要做什麼,但它似乎要淪落成尋找特定文件的目錄。而且,如果是這樣,Ruby的[Find](http://ruby-doc.org/stdlib-2.2.3/libdoc/find/rdoc/Find.html)類是一個很好的工具。它的啓動速度更快,並且比使用'Dir.glob'更具可擴展性,它將首先遍歷層次結構,收集列表,然後返回所有發現的數組。 Find的文檔顯示瞭如何修剪目錄。 –

+0

是的,我想下降到一個目錄,以獲得所有的.css和.js文件的路徑,但碰巧有一些壞的文件夾名稱以.js結尾,所以我想這些被排除在外。我不知道Find,所以我會檢查一下。 – kayla

+0

無論名稱如何,刪除文件夾都是一個小步驟。 'File.directory?('path/to/folder_or_file')'會告訴你。同樣,文檔特別演示瞭如何做到這一點。 –

回答

10

你不能這樣做,Dir.glob。您必須明確拒絕這些條目。

only_files = Dir.glob('*').reject do |path| 
    File.directory?(path) 
end 
4

您可以Dir.entries

Dir.entries('../directoryname').reject { |f| File.directory?(f) } 
4

做這可能是你的問題有點誇張,但rake定義一個類FileList。你可以用這個類替換Dir.glob

require 'rake' 
filelist = FileList.new("dir/**/*.{css,js}") 
filelist.exclude('**/stupidfolder.js') 
filelist.each do |file| 
    #... 
end 
+0

這是一個迂迴的方式來達到相同的點。 –

+0

我喜歡這個答案,因爲它的Rakefile應該能夠做到。只是一個替代答案,而不是一個圓的答案。 – Pred