2011-06-30 59 views

回答

1

一般來說,我不會 - 我會使用一個shell實用程序。認真。

另外,你要包括評論?等等,等等

有一個很好的答案,不使用Ruby的位置:How to count all the lines of code in a directory recursively?

如果我用的實際上做它的意圖接近這個我應該這樣做:

Dir['**/*.*'].each do |fname| 
    puts "#{fname} #{linecount(fname)}" 
end 

Linecount會像

def linecount(fname) 
    File.open(fname, "r") do |f| 
    return f.readlines.length 
    end 
end 

這是順便說一個討厭的黑客,因爲它讀取整個文件到內存正好看到陣列有多長,你可能希望獲得每一行並在讀完之後對它們進行計數。

你可以擺脫空白,或者只評論也僅增加計數器線。

喜歡的東西

lines = f.readlines 
lines.delete_if { |l| l =~ /^[[:space:]]*#|^$/ } 
return lines.length 

我沒有測試通過的方式,正則表達式。

作爲讀者練習 - 工作出了什麼「如果」語句是你需要把在放月底停止barfing上的目錄:d

2

http://www.ruby-doc.org/stdlib/libdoc/find/rdoc/classes/Find.html

模塊實現類似find

頁面上的例子給出了讓所有文件的大小在一個目錄的一個例子。應該是相當微不足道的改變它來計算總數線。

我建議不這樣做的紅寶石,除非你有太多...

wc -l `find /path/to/dir -type f` | tail -1 
1

@Ghoti,我想補充一點的給你留言,但沒有足夠的地位。

製作使用的的File.File?和File ::目錄?將有助於區分兩者,以便您知道是否需要深入到目錄或讀取文件。

+0

嘛,穴居的正由DIR []語句來完成的,但你並不想打電話目錄賣出期權,而不是一個二進制文件的兩種。 :D – Ghoti

+0

如果你可以放置一個目錄並將所有文件放入它,它將是一個非常漂亮的功能;-) – scradge

相關問題