在工作中我们有在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"