ruby 脚本 遍历目录以及子目录

笔者以为rails工程 生成批量进行测试的shell脚本为例,与大家一起探讨一下。

为了能够更加快速的运行所有的测试脚本,笔者采用的方法是编写一个shell,里面写满了:
ruby test/functional/user.rb
...
之类的语句。
这样,每次运行测试的之后,只需要运行这个shell即可。
(应该还有更加简单的方法,只是没有发现,希望有知道的朋友,告知一二 : oushunbao@gmail.com. 后来发现了一个命令: rake test正好可以解决测试的问题。)

进而发现,如果有测试脚本增加,那么有将要在shell脚本中自行添加。于是乎,笔者就在想,如果可以自动生成这个脚本,岂不更好?接着,就写了下面的代码。
大致思路就是,遍历指定目录以及子目录下的所有 *.rb的文件,并且组合成 ruby ..../filename.rb的形式。然后输出。
# create runtest.rb for rails.
# e.g. :(the name of this file is createruntest.rb)
# #>ruby createruntest.rb ./test > runtest.sh
# #>chmod 777 runtest.sh
#

def getfiles(path)
re = []
allre = []
Dir.foreach(path) do |f|
allre << f
end
allre.each do |f|
fullfilename = path + "/" + f
if f == "." or f == ".."
elsif File.directory?(fullfilename)
resub = []
resub = getfiles(fullfilename)

if resub.length > 0
ref = {}
ref[f] = resub
re << ref
end
elsif File.exist?(fullfilename) and (f =~ /\.rb$/) # only rb file
re << f
end
end
return re
end
def print_arr(arr,root)
sre = ""
arr.each {|value|
if value.class == Hash
value.each do |k,v|
#re += "#{k} => { #{print_arr(v)} }"
sre += print_arr(v,root+"/"+k)
end
else
#re += value
sre += "ruby #{root}/#{value} \n"
end
#re += ","

}
return sre
end

root = ARGV[0] || Dir.pwd
arr = getfiles(root)
puts print_arr(arr,root)


将以上代码保存到文件中(假设文件名为create_runtest.rb),并且将文件放置在rails的根路径下。
然后运行
#> ruby create_runtest ./test > runtest.sh
在设置权限
#> chmod 777 runtest.sh
ok
下次使用的时候,直接在rails根路径下运行 ./runtest.sh 就好了
(centos5 + ruby 1.8.6 + rails 1.2.3)

本文的中对目录中文件的解读采用了递归的方式进行,这样思路应该会更加清晰一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值