标签:traverse 遍历 end SHELL usr file path Ruby find
在工作中我们有在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"
标签:traverse,遍历,end,SHELL,usr,file,path,Ruby,find 来源: https://blog.51cto.com/u_15273414/2913710
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。