Ruby和SHELL中如何遍历指定目录的文件-创新互联

在工作中我们有在Ruby和SHELL中如何遍历指定目录的文件的需求,这个应该如何来实现呢?网上的方法也非常之多,我们可以拿来参考参考,如下边的traverse.rb文件内容所示:

创新互联云计算的互联网服务提供商,拥有超过13年的服务器租用、简阳服务器托管、云服务器、虚拟空间、网站系统开发经验,已先后获得国家工业和信息化部颁发的互联网数据中心业务许可证。专业提供云主机、虚拟空间、国际域名空间、VPS主机、云服务器、香港云服务器、免备案服务器等。
#!/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"

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:Ruby和SHELL中如何遍历指定目录的文件-创新互联
当前URL:http://ybzwz.com/article/dpijdp.html