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

【ruby】ruby实践之实现文件检索小工具

    博客分类:
  • ruby
阅读更多

 

ruby学习进入实践阶段。花了点时间用ruby实现了一个文件检索功能。小工具没什么好去说的,主要是本人通过这个熟悉ruby的一些api。

 

需求:根据输入的关键字在指定的目录下,搜索指定格式的文件。返回文件名或文件内容包含该关键子的文件列表。

 

输入:关键字 keyword,指定目录 path,文件格式 filepattern

输出:文件名或文件内容包含keyword的文件列表

 

效果如下,在"/home/yblin/rubyspace"下,*.rb的文件中,检索包含length关键字的文件:


 

git分支:

https://github.com/abingsky37/filesearcher

 

(注工具用到了ptools,需要通过sudo gem install ptools安装)

源码:

 

require "ptools"


class Filesearch
  
 def self.search(path,keyword,filepattern)
     if !File.exist?(path)
        return
     end 

     if File.directory?(path)
        searchInDir(path,keyword,"|",filepattern) 
     else
        grepFile(path,keyword,"|") 
     end
 end 

 def self.searchInDir(dir,keyword,prefix,filepattern)
    puts "#{prefix}___search in dir #{dir}:"
    Dir.chdir(dir)
    files=Dir.glob("*"+keyword+"*")
    if !files.empty?
      puts "   #{prefix}___ Files that filename contains \"#{keyword}:#{files}\""
    end
    Dir.foreach(dir){|x|
    next if x == "."
    next if x == ".."
    Dir.chdir(dir)
    if File.directory?(x)
          searchInDir(Dir.getwd+"/"+x,keyword,"   "+prefix,filepattern)
    elsif
       if File.fnmatch(filepattern,x)
        Dir.chdir(dir) 
        grepFile(Dir.getwd+"/"+x,keyword,prefix)
       end
    end
    }

 end

 def self.grepFile(fpath,keyword,prefix)
   if !File.exist?(fpath) || File.directory?(fpath)
   return
   end
   if !File.binary?(fpath)
    IO.foreach(fpath){|x| 
     if x.index(keyword) != nil
      puts "   #{prefix}#{fpath} contains keyword \"#{keyword}\""
      puts "                 #{x}"
      puts "                 ..."
      break
     end
    } 
   end
 end 

end

if ARGV.empty? || ARGV.length< 3
   puts "right format: ruby -w Filesearch.rb  path keyword filepattern"
else
   Filesearch.search(ARGV[0],ARGV[1],ARGV[2])
end
  • 大小: 77.4 KB
0
1
分享到:
评论

相关推荐

    ruby on rails实践

    在开始Ruby on Rails实践之前,你需要安装Ruby、Gem(Ruby的包管理器)、Bundler(依赖管理工具)以及Rails本身。通常,使用RVM(Ruby Version Manager)或rbenv来管理Ruby版本,确保系统环境的稳定。 三、创建新...

    ruby测试代码1

    总的来说,"ruby测试代码1"涉及的是使用Ruby进行测试实践,可能涵盖了MiniTest或RSpec的基本用法。同时,文件名提示了可能需要处理游戏相关的数据,这可能需要对文件I/O和特定文件格式有深入理解。在实际的开发过程...

    ruby语言帮助文当

    3. `ruby20.chm`:这个文件可能是整个Ruby 2.0语言的综合指南,包括语言规范、编程实践、API参考等内容,帮助开发者全面理解Ruby 2.0。 通过这些CHM文件,开发者可以深入学习Ruby 2.0的各个方面,了解如何有效地...

    resume 用Ruby技术实现的search 分页的例子

    在Ruby on Rails(ROR)框架中,实现搜索和分页功能是常见的需求,尤其是在构建数据密集型Web应用时。本示例将深入探讨如何利用Ruby技术和Rails的强大特性来完成这一任务。 首先,我们需要理解搜索功能的基础:查询...

    Ruby-attache一个文件上传方式

    总的来说,Ruby-Attache是一个强大的工具,简化了文件上传的处理,同时提供了丰富的功能和高度的灵活性,使得开发者能够专注于构建核心业务逻辑,而不是被文件管理问题困扰。通过熟练掌握Attache,你可以构建出更加...

    Ruby-Mobility可拔插的Ruby翻译框架

    总之,Ruby-Mobility是一个全面的解决方案,它为Ruby开发者提供了一套强大且灵活的工具来处理多语言支持。无论你是新手还是经验丰富的开发者,这个框架都能帮助你更有效地管理应用的翻译,提升用户体验,并降低维护...

    Ruby-CassandraDriverApacheCassandra的一个纯Ruby驱动器

    总的来说,Ruby-CassandraDriver是Ruby开发者连接和操作Apache Cassandra数据库的重要工具,其特性包括异步IO以提高性能,可配置的负载平衡策略优化集群利用,以及智能的重新连接和重试策略增强系统的稳定性和可用性...

    forecast-ruby, 用于从预测天气API中检索数据的ruby gem.zip

    forecast-ruby, 用于从预测天气API中检索数据的ruby gem forecast_ioruby 中的forecast.io API包装器。安装gem install forecast_io或者你的Gemfilegem 'forecast_io'用法确保你需要库。requir

    多文件内容检索替换

    首先,我们可以看到标签中有"源码"和"工具",这意味着我们将讨论一个可能的代码实现或工具来完成多文件内容的检索和替换。在给定的压缩包文件中,有四个文件:sample.rb、3.txt、2.txt和1.txt。sample.rb很可能是一...

    ruby初始使用过程总结

    理解并熟练掌握这些步骤,你就能顺利开始你的Ruby编程之旅。记住,实践是学习的最佳途径,动手尝试才是王道。在实践中,你会遇到更多问题,解决它们,你的技能就会不断提升。祝你在Ruby的世界里探索愉快!

    Ruby-SQLite3Ruby绑定SQLite3嵌入式数据库

    通过Ruby的包管理工具RubyGems,可以简单地执行以下命令来安装: ```bash gem install sqlite3 ``` 安装完成后,便可以在Ruby程序中引入SQLite3库: ```ruby require 'sqlite3' ``` Ruby-SQLite3的主要功能包括...

    Ruby-Money一个Ruby库来处理货币和货币转换

    Ruby-Money库是一个专门为Ruby编程语言设计的强大工具,它专注于处理货币相关的运算和货币转换。这个库被广泛用于需要精确管理货币数据的应用程序,比如电子商务、财务系统或者任何涉及金融交易的项目。在Ruby社区中...

    Packt.Cloning.Internet.Applications.with.Ruby

    Cloning Internet Applications with Ruby》,读者不仅能够掌握如何使用Ruby语言开发各种互联网应用,还能够在实践中提升自己的编程技能。Ruby作为一种强大的工具,在Web开发领域有着广泛的应用前景。希望本书能...

    Ruby-rgeoRuby的地理空间数据的库

    Ruby-rgeo库是Ruby编程语言中的一个核心工具,专门用于处理和操作地理空间数据。它为开发者提供了丰富的功能,使得在Ruby环境中进行地理信息系统(GIS)相关的开发变得更加便捷。Rgeo库不仅支持基本的空间数据类型,...

    Ruby-Emojiemoji的Rubygem

    这个Gem是Ruby开发中用于管理和操作Web资源,特别是与文本相关的应用程序,如社交媒体、博客、论坛或者任何需要增强用户体验和情感表达的地方时非常有用的工具。 在Ruby中,`emoji` Gem提供了大量的预定义表情符号...

    ruby和redis接口.rar

    总的来说,Ruby的Redis接口使得开发人员能够方便地与Redis进行通信,实现高效的数据存储和检索。而提供的Ruby脚本则为搭建和管理Redis集群提供了便利,降低了复杂性和出错率。对于想要构建高可用、可扩展的Redis环境...

    ruby-2.3.0

    此外,Ruby-2.3.0还引入了`Hash#dig`方法,这是一个非常实用的工具,用于从嵌套的哈希中检索值。它允许你在不知道具体层次的情况下安全地获取深层键的值,避免了因尝试访问不存在的键而引发的异常。例如: ```ruby ...

    Ruby语言教程和经典案例

    例如,可以创建一个简单的文件查找工具,输入文件名后搜索整个目录结构以找到该文件。 - **Web框架Rails的应用**:Ruby on Rails是一个流行的Web开发框架,它强调“约定优于配置”的原则。使用Rails可以快速搭建...

    基于Ruby on Rails框架实现的无线点餐系统

    Ruby on Rails框架实现的无线点餐系统项目是一个基于无线网络技术,专为餐饮行业设计的综合性信息化解决方案。此系统利用Ruby on Rails全栈式MVC框架,结合当下先进的移动互联网技术,旨在提升餐厅运营效率、优化...

    基于Ruby实现的管理游戏信息,以及游戏映射信息的系统

    3. **Ruby库的利用**:Ruby社区有许多优秀的库,如ActiveRecord(ORM框架)可以帮助我们与数据库进行交互,有效地存储和检索游戏数据;Sinatra或Rails(Web框架)可以用于构建游戏的后台服务,处理用户请求,提供API...

Global site tag (gtag.js) - Google Analytics