锁定老帖子 主题:在给定路径中搜索符合给定模式的文件
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (7)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-24
在指定路径中搜索符合给定模式的文件,并给出关于这些文件的详细信息。实现这一目标不必依赖于任何命令行程序,只需使用Ruby内建的API。
而且,这个例子展示了Ruby在简化脚本编程需求方面有多强大。它不是简单地模拟"find"命令,而是构建在该命令之上,因而在使用Ruby时具有很强的定制能力。
require 'find' puts "" puts "-----------------------File Search-----------------------------------" puts "" #请求用户提供搜索路径和匹配模式 print "Enter the search path : " searchpath = gets searchpath = searchpath.chomp puts "" print "Enter the search pattern : " pattern = gets pattern = pattern.chomp puts"----------------------------------------------------------------------" puts "Searching in " + searchpath + " for files matching pattern " + pattern puts"----------------------------------------------------------------------" puts "" Find.find(searchpath) do |path| #使用Ruby中“Find”类的“find”方法遍历指定的搜索路径 #检查发现的文件是否为一个目录。如果是目录,并且不是“.”则递归遍历该目录 if FileTest.directory?(path) if File.basename(path)[0] == ?. Find.prune else next end else if File.fnmatch(pattern,File.basename(path)) #使用“File”类的“fnmatch”方法检查发现的文件是否符合给定的模式 #如果文件符合模式,则输出文件的详细信息 puts "Filename : " + File.basename(path) s = sprintf("%o",File.stat(path).mode) print "Permissions : " puts s print "Owning uid : " puts File.stat(path).uid print "Owning gid : " puts File.stat(path).uid print "Size (bytes) : " puts File.stat(path).size puts "---------------------------------------------------" end end end
在命令行输入ruby file.rb运行该文件,然后输入搜索路径D:\ruby和匹配模式*.rb,下面是一个示例输出:
-----------------------File Search----------------------------------- Enter the search path : D:\ruby Enter the search pattern : *.rb ---------------------------------------------------------------------- Searching in D:\ruby for files matching pattern *.rb ---------------------------------------------------------------------- Filename : points_controller.rb Permissions : 100644 Owning uid : 0 Owning gid : 0 Size (bytes) : 12889 --------------------------------------------------- Filename : packages_controller.rb Permissions : 100644 Owning uid : 0 Owning gid : 0 Size (bytes) : 21000 --------------------------------------------------- Filename : orders_controller.rb Permissions : 100644 Owning uid : 0 Owning gid : 0 Size (bytes) : 2341 --------------------------------------------------- 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-24
这样也叫强大...在find的之上做的有意义的事为零。。。
|
|
返回顶楼 | |
发表时间:2009-11-24
囧啊,本来一行就能搞定的事情 ……
Dir.glob '*.rb' 再说 find 这个命令无论在 windows 还是 linux 还是 mac 都能用的 …… |
|
返回顶楼 | |
发表时间:2009-11-24
night_stalker 写道 囧啊,本来一行就能搞定的事情 ……
Dir.glob '*.rb' 再说 find 这个命令无论在 windows 还是 linux 还是 mac 都能用的 …… 又见一行命令能干啥干啥,你看清楼主的帖子了吗?你确定你这一行代码可以满足楼主的需求? |
|
返回顶楼 | |
发表时间:2009-11-24
ray_linn 写道 这样也叫强大...在find的之上做的有意义的事为零。。。
什么叫做DSL? |
|
返回顶楼 | |
发表时间:2009-11-24
night_stalker 写道 囧啊,本来一行就能搞定的事情 ……
Dir.glob '*.rb' 再说 find 这个命令无论在 windows 还是 linux 还是 mac 都能用的 …… ruby的find还是很好用的: require 'find' puts "input your dir:" dir = gets.chomp puts "input your pattern:" pattern = gets.chomp Find.find(dir) do |file| puts file if File.file?(file) && File.basename(file) =~/#{pattern}/ end |
|
返回顶楼 | |
发表时间:2009-11-24
0701 写道 night_stalker 写道 囧啊,本来一行就能搞定的事情 ……
Dir.glob '*.rb' 再说 find 这个命令无论在 windows 还是 linux 还是 mac 都能用的 …… 又见一行命令能干啥干啥,你看清楼主的帖子了吗?你确定你这一行代码可以满足楼主的需求? 一行也不是不可能的.. require 'find' Find.find(ARGV[0]){|file| [:mode, :uid, :gid,:size].each{|m| puts File.stat(file).send(m)} if File.file?(file) && File.basename(file) =~/#{ARGV[1]}/ } |
|
返回顶楼 | |
发表时间:2009-11-24
ray_linn 写道 这样也叫强大...在find的之上做的有意义的事为零。。。
这位大侠,你给大家解释一下什么才叫有意义的事,不要鄙视别人的劳动成果好不好 |
|
返回顶楼 | |
发表时间:2009-11-24
Hooopo 写道 0701 写道 night_stalker 写道 囧啊,本来一行就能搞定的事情 ……
Dir.glob '*.rb' 再说 find 这个命令无论在 windows 还是 linux 还是 mac 都能用的 …… 又见一行命令能干啥干啥,你看清楼主的帖子了吗?你确定你这一行代码可以满足楼主的需求? 一行也不是不可能的.. require 'find' Find.find(ARGV[0]){|file| [:mode, :uid, :gid,:size].each{|m| puts File.stat(file).send(m)} if File.file?(file) && File.basename(file) =~/#{ARGV[1]}/ } 有人愿意拆开写,有人喜欢一个链条大循环,风格不同而已,况且楼主更多的是想体现出过程,多打印了几条提示语而已,too naive的抬杠 |
|
返回顶楼 | |
发表时间:2009-11-24
最后修改:2009-11-24
222xiaohuan 写道 ray_linn 写道 这样也叫强大...在find的之上做的有意义的事为零。。。
这位大侠,你给大家解释一下什么才叫有意义的事,不要鄙视别人的劳动成果好不好 ruby -e"system('dir /s *.rb')" ,这样的东西如果有意义的话,我每天有意义的东西也太多了些。 |
|
返回顶楼 | |