如何编写像get_lines.rb file_name.rb
这样的ruby脚本,它返回通过文件夹>递归的应用程序中的代码总数/行数。文件夹>如app / modes,app / controllers等...所有文件!
答案 0 :(得分: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 :(得分: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
顺便说一下,我没有测试过regexp。
作为读者的练习 - 弄清楚你需要在句号结束时使用'if'语句来阻止它在目录上bar:D
答案 2 :(得分:1)
@Ghoti,我会将此添加为您的评论,但没有足够的状态。
使用File.file?和File ::目录?将有助于区分这两者,以便您知道是否需要深入挖掘目录或读取文件。