温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Ruby和SHELL中如何遍历指定目录的文件

发布时间:2020-04-09 18:25:13 来源:网络 阅读:6892 作者:抚琴煮酒 栏目:编程语言

在工作中我们有在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"
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI