在工作中我们有在Ruby和SHELL中如何遍历指定目录的文件的需求,这个应该如何来实现呢?网上的方法也非常之多,我们可以拿来参考参考,如下边的traverse.rb文件内容所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/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程序可以用其方法来实现,代码显得更为整洁,如下所示:
|
1
2
3
4
5
|
#!/usr/bin/ruby
require
'find'
Find.find(
"/usr/local/src"
)
do
|filename|
p filename
end
|
我们还可以利用Find.find方法来输出ruby中可用的rb库,如下所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/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目录里面包含的所有文件(包括子目录),那么应该如何实现呢?这里也会用到递归的思想,脚本如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/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博客,原文链接:http://blog.51cto.com/yuhongchun/1601278,如需转载请自行联系原作者