`
CharlesCui
  • 浏览: 417944 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

日积月累-分享我的工具库

阅读更多

 

 

  • 批量替换 指定目录及其子目录中所有文件内的字符串

 

#!/usr/bin/env ruby

class File
        class << self

        def gsub!(s,t,dir=Dir.pwd)

                Dir.entries(dir).each do |f| 
                        puts f
                        next if(f == "." || f == "..")

                        if(File.file? f) then
                                ct = IO.readlines(f).join
                                if ct.index(s) then
                                        puts "replace file <#{f}>." 
                                        ct.gsub!(s,t)
                                        File.open(f,"w+"){|ff|ff.write ct} 
                                end 
                        elsif(File.directory? f) then
                                self.gsub!(s,t,File.join(dir,f))
                        end 
                end 

        end 

        #end of <<

        end 

end

 

使用的时候:

 

File.gsub!("reg","--reg--",Dir.pwd)

 

就可以了.

 

 

 

 

  • 批量删除指定目录及子目录下含有某个扩展名的文件

#!/usr/bin/env ruby

class File
	class << self
	
	def grm(path,ext)
	  
  	  Dir.entries(path).each do |f|
  		next if (File.basename(f) == '.' || File.basename(f) == '..')

  		if File.directory?(File.join(path,f))
  			grm(File.join(path,f),ext)
  		elsif f != File.basename(f).chomp(ext)
  			puts File.join(path,f)
  			FileUtils.rm_f(File.join(path,f))
  		end
  	  end
  	
        end

	#end of <<

	end

end
 
File.grm("C:\\scripts",'log')
可以删除scripts下面及该目录的子目录下面所有log文件.


  • 获得本机IP

class Socket
    class << self

    def ips
          Socket.getaddrinfo(Socket.gethostname, nil)
    end

    end
end
 Socket.ips可以获得本机的IP列表数组.
分享到:
评论
35 楼 biejunbo 2010-08-15  
关注一下!
34 楼 lijunjie337 2010-08-11  
CharlesCui 写道
擦,这还新手贴?什么不新手?

我写出来给大家分享下这些很有价值的工具,你们有人不满意?

什么装12+1的人啊.

东西是简单的,但你有积累么?

这些东西大家Copy过去就可以用了,方便就是最大的价值所在.

谁给的新手贴,真BC!



同意  真的是个12+1
33 楼 kaka2008 2010-08-09  
感觉楼主是java党

ruby代码写的和java一样
32 楼 dominic_hong 2010-08-09  
我觉得这种分享很好,把某些常用功能集成到工具库中,平常用起来方便,也不用费尽心思想些Shell编程了。
31 楼 CharlesCui 2010-08-09  
dazuiba 写道
那就装下cygwin嘛.  有不费事儿.

说不定以后会有写比较复杂的事情,  比如网络磁盘文件同步等,  难不成你再写个rsync?

俺觉得,  与其自己写, 还不如看看linux GNU工具帮助文档.  何必重复做类似的事情呢?


怎么会是重复劳动呢?
File库中所有的函数都是重复劳动,他们都可以被shell以及linux自带的source来替代,
其他语言也类似.

我所做的事情就是把File以及FileUtils里面没有的东西丰富一下,这怎么算重复呢?

如果以后有更复杂的需求,那我就再写一些函数,这样File这个类就会越来越丰富,同时我还会把这些在原版Ruby core中不带的方法分享给大家,这样Ruby不就更强壮了么?一个语言不也就这么发展起来的么?


为什么大家看问题如此片面?如果说重复,Ruby其实也不需要发明了.
30 楼 dazuiba 2010-08-08  
那就装下cygwin嘛.  有不费事儿.

说不定以后会有写比较复杂的事情,  比如网络磁盘文件同步等,  难不成你再写个rsync?

俺觉得,  与其自己写, 还不如看看linux GNU工具帮助文档.  何必重复做类似的事情呢?
29 楼 rubynroll 2010-08-08  
coding ruby like python ? sure it works, but no fun
28 楼 dennis_zane 2010-08-08  
Ruby可以写的像perl,Ruby对那些奇奇怪怪的符号兼容得很好。但是这种风格不值得提倡,你还不如用perl去。
27 楼 ylt 2010-08-07  
CharlesCui 写道
Readonly 写道
这种事情用ruby属于杀鸡用牛刀:

1.
find 'yourpath' -type f -iname '*.html' -exec sed -i 's/regexp/replacement/g' '{}' \;


2. 请按1依葫芦画瓢



您老也出来遛弯了?

我干那个事情是在windows上面,没装cygwin,请教该怎么做.


第二条在Windows下:
del *.log /s


第一条更简单的写法
rpl old_string new_string target_file(s)


26 楼 orcl_zhang 2010-08-06  
投个良好。
楼主你知道一般Ide里的全局搜索怎么实现的么?啥语言写的。shell,c?
带正则的。期待更强大版本,我需要带正则的,查找就行,最好把结果导出到文件内。
25 楼 下一站,火星 2010-08-06  
多说一点,我觉得给楼主投新手是不厚道的,看看楼主的博客可以知道,楼主分享了大量实用的文章,而且楼主的实力我多少知道一点,可以说水平不会比大部分投新手票的人差多少,其实那些喜欢搜别人东西看 又给别人投新手的人,态度需要改变,至少这个帖子后面的回复有一定的价值,也反映当前国内ruby领域的现状,水平风格都参差不齐,离繁荣还差很多,ruby社区能多一点包容,少一点唧唧歪歪或许会更友爱一点。

我旗帜鲜明的投个良好
24 楼 XTU_xiaoxin 2010-08-06  
麻痹的! 又看到一些垃圾闲着蛋疼,在这里给别人的帖子投新手帖了。
这些狗杂种,其实自己狗屁不懂,就会装,天天在论坛上给别人投隐藏贴啊、新手帖
什么的。
  一群垃圾废物,不看或不喜欢可以滚啊,喜欢滥投票

  老子就给他投精华帖,鼓励楼主多多努力,以后多分享自己的资料知识,别理那些
装痹的
23 楼 下一站,火星 2010-08-06  
在unix中强调管道风格的编程,多少有点亲近FP,你如果偏爱lambda演算,那么这种东西根本达不到黑魔法的level
22 楼 下一站,火星 2010-08-06  
其实楼主的代码写的中规中矩,没什么好唧唧歪歪的

至于后面那位和楼主的风格那么迥异,实质上是 OOP和 FP之争,不管是python 还是
ruby,都对FP有一定的支持,这也导致很多FP控喜欢拿一行流(FP见怪不怪的东西)之类的东西来讥笑OOP(java)患者,我觉得这种事情值得商榷。因为很多人都是从java起步,对FP感觉很诡异,比如Erlang这种东西,我是不大习惯。
21 楼 iaimstar 2010-08-06  
我这个各种黑魔法的世界绝望了T_T

20 楼 icefishc 2010-08-06  
piao_bo_yi 写道
外国人的符号用的就是好,不得不佩服。看着我头都晕了~·

night_stalker 写道
可以写点神秘的 one-liner ..

1 some-dir str-to-find str-to-replace
Dir.glob("%s/**/*"% $*){|f|s=IO.read(f).gsub($*[1],$*[2]);File.open(f,'w')<<s}


ruby -rfileutils 2.rb some-dir ext-to-remove
FileUtils.rm_f Dir.glob("%s/**/*.%s"%$*)

你好外国人
19 楼 piao_bo_yi 2010-08-06  
外国人的符号用的就是好,不得不佩服。看着我头都晕了~·
18 楼 CharlesCui 2010-08-06  
jinleileiking 写道
哦。。原来不是不懂%

是不懂 $* $1 等。。。我习惯用ARGV。

杯具了。。。。。


没啥好悲剧的,学而时习之,心太好最重要,厚着脸皮学知识是一种气魄^_^

不过作为民工,我还是觉得实用最重要.
17 楼 jinleileiking 2010-08-06  
哦。。原来不是不懂%

是不懂 $* $1 等。。。我习惯用ARGV。

杯具了。。。。。
16 楼 CharlesCui 2010-08-06  
night_stalker 写道
囧.. 镐头书里第 10 章就有啊!

另外熟悉 shell 脚本的人就会觉得 $* 很自然…… 你们每天用的 linux 里头就有一大堆的黑魔




这怪我们自己了.总觉得没办法记住那么多的语法和技巧,所以那些偏僻的东西就不用了,(个人认为偏僻的可能大家不觉得,可能大家用某些语言更多更熟练吧.)

习惯问题吧,有人学语言讲究细节,讲究精益求精,
我就讲究能干活就可以了,最好不要和其它语言比较起来太另类,工作中这个语言要用,那个语言要用,能记住多少啊,所以我的习惯就是牢记通用的.

相关推荐

Global site tag (gtag.js) - Google Analytics