在工作中我们有在Ruby和SHELL中如何遍历指定目录的文件的需求,这个应该如何来实现呢?网上的方法也非常之多,我们可以拿来参考参考,如下边的traverse.rb文件内容所示:
#!/usr/bin/ruby
def traverse(path)
if File.directory?(path)
puts "Dirs:" + path
Dir.foreach(path) do |file|
if file != "." and file != ".."
traverse(path + "/" + file)
end
end
else
puts "Files:" + path
end
end
traverse("d:/vmware")
其实ruby中已经定义了Find.find方法来处理这种情况,上面的ruby程序可以用其方法来实现,代码显得更为整洁,如下所示:
#!/usr/bin/ruby
require 'find'
Find.find("/usr/local/src") do |filename|
p filename
end
我们还可以利用Find.find方法来输出ruby中可用的rb库,如下所示:
#!/usr/bin/ruby
require "find"
def printrb
$:.each do |dir|
next if dir == "."
next if dir == ".."
Find.find(dir) do |f|
if f =~ /\.rb$/i
puts f
end
end
end
end
printrb
如果我们用shell脚本来实现类似需求,比如想遍历/usr/local/src目录里面包含的所有文件(包括子目录),那么应该如何实现呢?这里也会用到递归的思想,脚本如下:
#!/bin/bash
function traverse(){
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
traverse $1"/"$file
else
echo $1"/"$file
fi
done
}
traverse "/usr/local/src"
©著作权归作者所有:来自51CTO博客作者抚琴煮酒的原创作品,如需转载,请注明出处,否则将追究法律责任
ruby递归traverse运维开发(DevOps)篇
共同学习,写下你的评论
评论加载中...
作者其他优质文章