博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby和SHELL中如何遍历指定目录的文件
阅读量:6339 次
发布时间:2019-06-22

本文共 1140 字,大约阅读时间需要 3 分钟。

在工作中我们有在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,如需转载请自行联系原作者
你可能感兴趣的文章
关于MySQL的几点安全配置
查看>>
zabbix监控H3C的接口流量
查看>>
HAProxy的压缩功能
查看>>
shell 简单计算器
查看>>
浅析Python进行接口自动化
查看>>
windows及linux环境下永久修改pip镜像源的方法
查看>>
表格表单及样式重置、特性
查看>>
八月个人考核
查看>>
linux网卡绑定
查看>>
Oracle技术之缺少log_archive_config导致归档路径被禁用
查看>>
Oracle 临时表之临时表的应用问题
查看>>
Linux之进程查看与管理
查看>>
碟中谍:完成任务机房是核心
查看>>
戴尔联合微软开发私有云入门级系统
查看>>
图片轮播滚动
查看>>
关于客户端与服务端时区不同导致客户端上的时间不准问题的解决方案
查看>>
我的日常Git使用
查看>>
基于Windows AD的单点登录系统(二)
查看>>
第17章 重新登录
查看>>
java 表现层:jsp、freemarker、velocity
查看>>