`
hellosoft
  • 浏览: 54814 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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)

本文的中对目录中文件的解读采用了递归的方式进行,这样思路应该会更加清晰一下。

分享到:
评论

相关推荐

    Ruby中遍历目录的简洁方法

    在Ruby编程语言中,遍历目录是常见的任务,特别是在处理文件系统操作时。本文将深入探讨两种简洁的遍历目录的方法,并提供相关的编程知识。 首先,我们来看一下在Ruby中自定义遍历目录的方法。在给出的`traverse.rb...

    遍历输入的目录

    在Shell脚本中,`find`命令是遍历目录的强大工具,例如`find . -type f`将列出当前目录下所有文件,包括隐藏文件。 8. **C++**: C++没有内置的文件系统库,但可以使用Boost库的`boost::filesystem`,或者C++17及...

    遍历文件夹并建成目录树

    在Java中,可以使用`java.io.File`类的`listFiles()`方法和递归来遍历目录树: ```java import java.io.File; public void traverseDirectory(File dir) { File[] files = dir.listFiles(); if (files != ...

    基于Ruby的MKS rebase脚本 Ruby语言基础

    在IT行业中,脚本语言因其灵活性和高效性而被广泛使用,其中Ruby作为一种优雅且强大的脚本语言,常用于自动化任务、Web开发以及构建工具。本主题“基于Ruby的MKS rebase脚本 Ruby语言基础”关注的是如何利用Ruby语言...

    文件夹遍历

    在Ruby中,你可以自定义一个递归函数来遍历目录及其子目录中的所有文件。这种方法直观地模拟了树形结构的遍历过程,对于理解和操作文件系统非常有帮助。 ```ruby def traverse_dir(file_path, &block) if File....

    Ruby遍历文件夹同时计算文件的md5sum

    总结来说,这个Ruby脚本提供了一种高效的方法来遍历指定目录及其子目录,对所有文件计算MD5哈希值,然后输出结果。这对于文件系统的备份验证、文件一致性检查等场景非常有用。通过调整和扩展此代码,可以实现更复杂...

    hdfs client for ruby (just jruby) hdfs客户端 基于jruby.zip

    4. 遍历目录:获取目录结构,列出文件和子目录。 5. 容错机制:如果某个节点失效,HDFS客户端应该能自动重定向到备份节点进行操作。 6. 安全性:支持Hadoop的安全特性,如Kerberos认证,确保数据传输的安全性。 ...

    ruby语言基础教程.pptx(共17页,携程内部培训版)

    - **列出目录**: 使用 `Dir.entries` 或 `Dir.glob` 方法列出目录下的文件和子目录。 - **删除目录**: 使用 `Dir.delete` 方法删除目录及其内容。 以上内容涵盖了从Ruby的基础语法到高级特性的各个方面,对于初学...

    CocoaPods工具链使用脚本

    CocoaPods还支持子目录集成,这意味着库的源代码可以被组织在项目的特定目录下,而不是直接添加到`Pods`目录。这对于保持项目结构的清晰有很大帮助。 总结来说,CocoaPods工具链使用脚本能够帮助开发者更有效地管理...

    obsidian_utils:Obsidian.md的各种脚本和实用程序

    todo.rb 跑步: ruby todo.rbTodo.rb将循环遍历notes目录(包括子目录)中的所有markdown文件,以查找遵循空清单的语法的所有行。 然后,将它们全部(作为副本而不是嵌入) TODO.md到notes目录中名为TODO.md的文件中...

    ruby-sysutils:Ruby 的系统库-开源

    例如,使用Ruby-SysUtils,开发者可以编写一个脚本来遍历所有用户的环境变量,或者启动、停止系统服务,而无需深入学习操作系统底层的API。这种抽象层提高了开发效率,也增强了代码的可移植性。 虽然Ruby-SysUtils...

    yjit-bench

    benchmarks下的子目录是较大的宏benchmarks 。 每个基准都包含一个在/lib/harness.rb找到的/lib/harness.rb 。 该线束控制基准测试的运行次数,并将计时值写入输出CSV文件。 run_benchmarks.rb脚本从YJIT存储库中...

    infraero_cralwer:Projeto desenvolvido,básicosobre网络爬虫和Ruby

    在这个目录下,我们可能会找到以下文件和子目录: - `Gemfile`: 定义项目依赖的Ruby库,如Nokogiri和HTTParty。 - `Gemfile.lock`: 记录具体版本的库,确保在不同环境中的一致性。 - `lib/`: 存放项目的源代码,如...

    txt文件合并多个文件夹内容

    这个脚本会将指定目录及其子目录下的所有TXT文件内容合并成一个名为'merged.txt'的新文件。 除了Python,其他编程语言如Java、C#、Ruby等也有类似的方法实现此功能。如果你对特定语言的实现有需求,可以根据相应的...

    The Perl Programming Language

    例如,编写一个Perl脚本来遍历指定目录下的所有文件,并打印出每个文件的信息。 ```perl #!/usr/bin/perl use strict; use warnings; opendir(my $dh, '.') or die "Cannot open directory: $!"; while (my $file ...

    MyEclipse 8.5+spket1.6.18.jar +ext-3.4.0 安装配置

    提供的代码示例展示了如何遍历指定目录下的所有文件和子目录,对于每个文件或目录,会根据名称格式进行解析并输出相关信息。这种代码通常用于自动化处理文件系统中的数据,例如在构建系统中自动识别和处理特定命名...

    aA-家庭作业:在App Academy中完成的所有作业的单个仓库

    每个作业可能被组织成不同的子目录或文件,按照课程进度或者主题进行分类。通过浏览这些文件,我们可以了解到学员是如何解决各种编程问题的,包括如何定义方法、如何操作数组和哈希、如何使用类和模块、以及如何进行...

    CodeEval:代码评估项目! 希望能获得许多乐趣,解决复杂且对大脑有害的问题!

    2. ** Challenges **目录:包含各个CodeEval挑战的子目录,每个子目录可能有一个或多个Ruby文件,用于实现特定的解决方案。 3. ** lib **目录:可能包含通用函数或模块,供挑战代码使用。 4. ** test **目录:包含...

    程序员攻略

    - **项目二**:遍历本地文件系统,统计一个目录及其子目录下所有文件的大小,并按大小排序后输出结果。 - **项目三**:与数据库交互,利用Python连接SQLite数据库,实现对数据的增删查改操作。 2. **掌握一种高效...

    Go-master.zip

    1. **src**:存放源代码文件,每个子目录对应一个独立的package。 2. **pkg**:编译后的目标代码(.a文件)存放于此,供其他程序引用。 3. **bin**:编译完成后生成的可执行文件。 4. **doc**:项目的文档,如README...

Global site tag (gtag.js) - Google Analytics