快速业务通道

利用 Ruby 的威力更有效地进行系统管理

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-12

在这个例子中:

第 5-11 行 - 请求用户提供搜索路径和搜索模式.
第 16 行 - 使用 Ruby 中 “Find” 类中的 “find” 方法遍历指定的搜索路径.
第 17 行 - 检查发现的文件是否为一个目录.如果是目录,并且不是 “.”,则递归地遍历该目录.
第 24 行 - 使用 “File” 类中的 “fnmatch” 方法检查发现的文件是否符合给定的模式.
第 25-34 行 - 如果文件符合模式,则打印文件的详细信息.

下面是这个脚本的一个示例输出.


清单 2. 第一个例子的示例输出

[root@logan]# ruby findexample.rb

-----------------------File Search-----------------------------------

Enter the search path : /test

Enter the search pattern : *.rb
----------------------------------------------------------------------
Searching in /test for files matching pattern *.rb
----------------------------------------------------------------------

Filename : s.rb
Permissions : 100644
Owning uid : 1
Owning gid : 1
Size (bytes) : 57
---------------------------------------------------
Filename : test.rb
Permissions : 100644
Owning uid : 0
Owning gid : 0
Size (bytes) : 996
---------------------------------------------------
Filename : s1.rb
Permissions : 100644
Owning uid : 1
Owning gid : 1
Size (bytes) : 39
---------------------------------------------------

在系统管理期间,最常见的一个需求是有效地使用 zip 文件来管理备份,或者将一组文件从一台计算机转移到另一台计算机.在这个方面,Ruby 很有优势.这里的第二个例子构建在第一个例子的基础上,但是包含了一个场景,在此场景中,需要将搜索到的文件打包到 zip 文件中.

内建的 zlib 模块可帮助处理 gzip 文件,对于大多数情况它都够好.但是,在这里我将使用另一个很好的 Ruby 库,即 “rubyzip”,来创建和处理 zip 归档文件.请查看 参考资料 小节,找到下载它的链接.要注意,这个例子使用纯 Ruby,它不依赖于计算机上当前提供的任何命令行实用程序.

安装 rubyzip

通过提供的链接下载 “rubyzip” gem,并将它复制到系统中.(在撰写本文之际,它的文件名是 “rubyzip-0.9.1.gem”).
运行 gem 安装 rubyzip-0.9.1.gem


清单 3. 使用 zip 文件

require ''rubygems''
require_gem ''rubyzip''
require ''find''
require ''zip/zip''

puts ""
puts "------------------File Search and Zip-----------------------------"
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 ""
puts"----------------------------------------------------------------------"
puts "Zipping up the found files..."
puts"----------------------------------------------------------------------"
Zip::ZipFile.open("test.zip", Zip::ZipFile::CREATE) {
|zipfile|
Find.find(searchpath) do |path|
if FileTest.directory?(path)
if File.basename(path)[0] == ?.
Find.prune # Don''t look any further into this directory.
else
next
end
else
if File.fnmatch(pattern,File.basename(path))
p File.basename(path)
zipfile.add(File.basename(path),path)
end
end
end
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号