`
CharlesCui
  • 浏览: 430925 次
  • 性别: 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 里头就有一大堆的黑魔




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

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

相关推荐

    vue-ydui使用文档

    3. **易于集成**:Vue-YDUI是基于Vue.js构建的,因此与Vue生态系统兼容良好,可以轻松地与Vuex、Vue Router等工具结合使用。 4. **模块化**:Vue-YDUI采用模块化的组件结构,开发者可以根据项目需求选择性引入所需...

    leetcode题库-DayLearnNote:面试笔试题、读书笔记,记录工作、学习过程遇到的任何知识点

    总结,LeetCode题库是程序员提升技术能力的重要工具,而"DayLearnNote"学习法提供了一种系统性的学习路径。通过每日学习、笔记整理、社区分享,我们可以不断提升自己的编程技巧,为面试和工作做好充分准备。在实践中...

    书桌背景的读书分享会PPT模板免费下载

    要把摘记在笔记本里的内容搬进头脑这个“贮存库”里,这就必须经常翻阅笔记本,熟读所记内容直到背诵,这样日积月累头脑里的东西越来越多,到了写作的时候,要什么有什么,信手拈来,自然就得心应手了。 ... 三、...

    原来编程是如此有趣讲座Scratch创意编程课程的开发学习教案.pptx

    - "日积月累":积累特殊指令的用法,扩展学生的知识库。 - "巩固和提高":定期回顾和复习所学,确保对指令的掌握程度。 此外,书中还提到了一些硬件平台的应用,如使用深圳奥特森科技的传感器板,结合Scratch软件...

    java云笔记代码与文档

    在这个项目中,开发者利用Java的特性与强大的开源库,构建了一个支持多用户、多设备同步的云笔记系统。 首先,我们可以从描述中了解到,该项目包括了需求文档和每日的代码更新,这表明它是一个持续进行的开发过程,...

    leetcode卡-LC-Everyday:LC-日常

    这种“打完下线”的描述,暗示了用户以完成一定的题目为目标,通过日积月累,不断深化对编程解决问题的能力。 "系统开源"这一标签则揭示了项目可能包含开源代码或工具,这使得其他开发者可以查看、学习甚至参与到这...

    部编三年级上册语文园地四教案.pdf

    小组讨论的方式让学生分享各自的阅读经验,相互学习,取长补短,这样不仅能够加深学生对阅读材料的理解,还能够培养他们的合作精神和沟通能力。 识字加油站板块则是对学生识字能力的巩固和提升。通过复习查字典技能...

    keep-leetcode:一日一算法,共同进步(防老防痴呆)

    总的来说,"keep-leetcode"项目提供了一个系统化的算法学习路径,借助JavaScript这一强大工具,让开发者在实战中提升技能。参与这个项目,不仅可以提升个人技术能力,还可以培养良好的学习习惯,预防技能退化,保持...

    《【回顾拓展四答案】《回顾拓展四》教案范文》.doc

    成语作为中华文化的重要组成部分,不仅是语言表达的重要工具,更是文化的载体。通过朗读和背诵成语,学生不仅能够积累词汇,还能够在实际的语言环境中运用成语,从而加深对语言的理解和感受。同时,对于成语的分类...

    atcoder:python的atcoder

    7. **学习社区**:AtCoder拥有活跃的社区,用户可以分享解题思路,讨论算法,互相学习。参与讨论和查看别人的解决方案是提升自己的好途径。 通过持续在AtCoder上的实践,Python程序员不仅可以提高编程技能,还能...

    Problem_Solving_with_Python:1天1次提交

    同时,Python丰富的库资源如NumPy(科学计算)、Pandas(数据分析)、Matplotlib(数据可视化)等也是提升问题解决能力的重要工具。 五、实战项目 理论结合实践是学习的最佳方式。尝试参与开源项目、解决实际问题...

    leetcode:算法刷题

    对于想要深入学习JavaScript并希望提升算法能力的开发者来说,LeetCode无疑是一个极好的资源库。 LeetCode的挑战涵盖了从基础到高级的各种算法问题,这些问题通常分为几个难度等级:简单、中等和困难。通过定期刷题...

Global site tag (gtag.js) - Google Analytics