`
CharlesCui
  • 浏览: 431066 次
  • 性别: 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列表数组.
分享到:
评论
15 楼 icefishc 2010-08-06  
用Find.find会更省事些
14 楼 night_stalker 2010-08-06  
囧.. 镐头书里第 10 章就有啊!

另外熟悉 shell 脚本的人就会觉得 $* 很自然…… 你们每天用的 linux 里头就有一大堆的黑魔
13 楼 icefishc 2010-08-06  
CharlesCui 写道
sword0607 写道

同感,我觉得使用ARGV[0], ARGV[1]会不会让代码的可读性更好一些


我更好奇的是NS或者那些Ruby的黑魔法师们,是如何学到这些黑魔法的,



这东西也不算偏吧. 用了这个不至于影响可读性

至于那个 % 要算基本功能了吧。 既不是ruby特有也不是不常用
12 楼 CharlesCui 2010-08-06  
sword0607 写道

同感,我觉得使用ARGV[0], ARGV[1]会不会让代码的可读性更好一些


我更好奇的是NS或者那些Ruby的黑魔法师们,是如何学到这些黑魔法的,

可能怪我对Ruby了解不深,我只是用用而已,不够深入,惭愧惭愧.

不过如果谈到项目开发,我们更应该关注于:
  • 架构设计是否合理,
  • 代码的健壮性及运行效率,
  • 以及代码的可维护性.


这些对企业开发很有帮助的特性和那些黑魔法没有直接关系.

这也让人看到了Ruby虽然好看,但还不足以挑起企业开发主力语言的大梁.
可能是因为大家用Ruby的时候更喜欢把它玩的花哨些,而不是关注于解决全局线程锁,以及解析器运行效率等更具有挑战性的问题吧.
11 楼 sword0607 2010-08-06  
CharlesCui 写道
jinleileiking 写道
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"%$*)


那个%是干什么的....


格式化字符串,都是ruby里面隐藏的很深的细节,不过这些黑魔法太花哨了,让人花费大量的脑细胞去记忆.


同感,我觉得使用ARGV[0], ARGV[1]会不会让代码的可读性更好一些
10 楼 CharlesCui 2010-08-06  
jinleileiking 写道
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"%$*)


那个%是干什么的....


格式化字符串,都是ruby里面隐藏的很深的细节,不过这些黑魔法太花哨了,让人花费大量的脑细胞去记忆.
9 楼 jinleileiking 2010-08-06  
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"%$*)


那个%是干什么的....
8 楼 CharlesCui 2010-08-06  
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"%$*)



喜欢NS的风格,无论自己写文章还是回复别人的帖子,都能抛出点让人眼睛一亮的东西.

这个论坛该多一点NS一样的同学.
7 楼 night_stalker 2010-08-06  
可以写点神秘的 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"%$*)
6 楼 CharlesCui 2010-08-06  
qichunren 写道
我支持你。

另外,你第二个脚本中第12行应该是调用grm这个方法吧。


对,写错了,是个递归,改名的时候改错了
5 楼 CharlesCui 2010-08-06  
Readonly 写道
这种事情用ruby属于杀鸡用牛刀:

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


2. 请按1依葫芦画瓢



您老也出来遛弯了?

我干那个事情是在windows上面,没装cygwin,请教该怎么做.
4 楼 jinleileiking 2010-08-06  
其实... ruby也可以写成像Readonly一样的吧..

只不过...xxxxxxxxx

话说...这个应该大家投票的原因嘛。。。你懂的。。。

我那个jruby聊天工具,某人还想投隐藏呢...
3 楼 Readonly 2010-08-06  
这种事情用ruby属于杀鸡用牛刀:

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


2. 请按1依葫芦画瓢
2 楼 qichunren 2010-08-06  
我支持你。

另外,你第二个脚本中第12行应该是调用grm这个方法吧。
1 楼 CharlesCui 2010-08-06  
擦,这还新手贴?什么不新手?

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

什么装12+1的人啊.

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

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

谁给的新手贴,真BC!

相关推荐

    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