.DS_Store ファイルを削除する&Rubyの練習目的で作ってみたもの(osx-dsstore.rb)を書き換えつつ..1.9.0 の String の練習しつつ。
Struct.new を使った場合と使わないで def initiailize @path end のようにした場合の2バージョンつくって time で計ったり profile を試してみたり...
% ruby -r profile osx-dsstore.rb
1.9.0 では 1.8.6 とはソート順が逆順になったようだ。。。
osx-dsstore.rb をもとに早さを計ってみた。
現在、Apple 提供の Ruby と、自分でインストールした Ruby とのバージョンは一致している。にもかかわらず自分でmakeインストールした1.8.6が早いのはなぜなんだろ。もっとも、ちゃんと計ったとは言えない。
指定したディレクトリにあるファイル数が多ければ多いほど如実に差が出る?と思ったらそうでもなかった。
% time /usr/bin/ruby osx-dsstore.rb # 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
...
real 0m3.813s
user 0m0.788s
sys 0m2.166s
% time /usr/local/bin/ruby osx-dsstore.rb # 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.1.0]
...
real 0m3.606s
user 0m0.754s
sys 0m2.068s
% time /usr/local/d/bin/ruby osx-dsstore.rb # 1.9.0 (2007-12-25 revision 14709) [i686-darwin9.1.0]
...
real 0m3.096s
user 0m0.780s
sys 0m2.093s
osx-dsstore.rb
=begin
Purpose: Remove '.DS_Store' for OS X 10.5.x
# Search .DS_Store file (% find ./ -name .DS_Store)
% ruby rmDS-Store.rb ~/Desktop/foo
=>
ls /Users/home/Desktop/foo/.DS_Store
# Remove .DS_Store file
% rmDS-Store.rb ~/Desktop/foo/ rmf
=>
Removed: /Users/home/Desktop/foo/.DS_Store
Removed: /Users/home/Desktop/foo/bar/.DS_Store
# Not support
path error like this..
ls: /Volumes/foo/bar : No such file or directory # path include 'space character'
=end
require 'find'
class DSStore < Struct.new(:path, :option)
def list
return nil unless exist?
return nil unless FileTest.directory?(self.path)
list = Array.new
#ごみ箱のなかはみにいきません。
Find.find(self.path){|path| list << path if File.basename(path) =~ /^.DS_Store$/}
return list
end
def exist?
File.exist?(self.path)
end
def sys_ls(f)
system("ls -la #{f}")
end
def sys_rm(f)
system("rm #{f}")
print "Removed: #{f}\n"
end
def command
begin
unless exist?
print "not found directory"
exit
end
list.each{|f|
sys_ls(f) if self.option == 'ls'
sys_rm(f) if self.option == 'rmf'
}
rescue
end
end
end
ds = DSStore.new
ds.path = Dir.pwd
ds.option = 'ls'
## option ##
ds.path = ARGV[0] unless ARGV[0].nil?
ds.option = ARGV[1] unless ARGV[1].nil?
ds.command
+++ memo +++
http://mono.kmc.gr.jp/~yhara/d/?date=20071215#p03
1.9では、明示的にいずれかを選んでもらうようにした
str.lines.each (or each_line)
str.chars.each (or each_char)
str.bytes.each (or each_byte)
str.each とかしてるプログラムはほとんどないので影響は少ないと思う
str.each とかしてるプログラムはほとんどないらしい... ほとんどない....そーなんだっ。知らなかった。
--imported_from
http://www.midore.net/daybook/2008/01/1200841265.html
+++ 追記 +++
2010-02-06
関連する記事
2009-10-03
Remove DS_Store file
0 件のコメント:
コメントを投稿