Skip to content

Instantly share code, notes, and snippets.

@campanalbero
campanalbero / gist:14cda6ace0e3719e701f
Created October 30, 2014 10:00
引数で指定するフォルダ以下のファイルの拡張子毎にパスを出力する
hash = Hash.new()
Dir.glob(File.expand_path(ARGV[0]) + '/**/*') do |f|
if File.ftype(f) == "file"
ext = File.extname(f)
arr = hash[ext]
if arr == nil
arr = Array.new()
end
hash.store(ext, arr.push(f))
end
@campanalbero
campanalbero / gist:9cbcc394afb84ffd2096
Last active August 29, 2015 14:08
引数フォルダ以下にあるファイルの拡張子を重複なしで表示
require 'set'
set = Set.new()
Dir.glob(File.expand_path(ARGV[0]) + '/**/*') do |f|
if File.ftype(f) == "file"
ext = File.extname(f)
set.add(ext)
end
end
@campanalbero
campanalbero / gist:2d35e22721e14f762159
Created September 17, 2014 19:11
sequel で insert / delete
require 'rubygems'
require 'sequel'
require 'pp'
DB = Sequel.sqlite('photo.db')
failures = DB[:failure]
# insert into failure (path) values ('/path/to/photo.file');
failures.insert(:path => '/path/to/photo.file')
@campanalbero
campanalbero / gist:121aa020f50a307a2b50
Created September 17, 2014 19:08
sequel で where 句の書き方
require 'rubygems'
require 'sequel'
require 'pp'
DB = Sequel.sqlite('photo.db')
dataset = DB[:photos]
# どちらでも同じ
# select * from photos where model = 'NIKON D40';
pp dataset.filter(:model => 'NIKON D40').first
@campanalbero
campanalbero / gist:d820772d0ccc15671da9
Last active August 29, 2015 14:06
sequel で first / last
require 'rubygems'
require 'sequel'
require 'pp'
DB = Sequel.sqlite('photo.db')
dataset = DB[:photos]
pp dataset.first
# dataset.first は order by がなくてもうまくいが dataset.last は order を指定してないと怒られる理不尽仕様
pp dataset.order_by(:date_time_original).last
@campanalbero
campanalbero / gist:1448554f77e8884af886
Created September 17, 2014 19:02
sequel で DB から読み込み
require 'rubygems'
require 'sequel'
require 'pp'
DB = Sequel.sqlite('photo.db')
items = DB["select * from photos where datetime(date_time_original) > datetime('2014-01-01 00:00:00')"].all
pp items
@campanalbero
campanalbero / gist:7a3001777911aea88fa3
Created September 2, 2014 17:37
FROM フォルダ以下のファイルを再帰的にパス順に出力する(文字同士の比較はバイトコード)
Dir.glob(FROM + '**/*').sort{|a, b| a <=> b}.each do |f|
puts f
end
# 順場関係なしに全部出力したいだけなら以下の通り
# Dir.glob(FROM + '**/*') do |f|
# puts f
# end
@campanalbero
campanalbero / gist:2a80b7025c4d33cb2432
Created September 2, 2014 17:19
ruby で exiftool を使って、FROM_FILE の EXIF データを TO_FILE に全部コピペする
require 'mini_exiftool'
exif = MiniExiftool.new(TO_FILE)
exif.copy_tags_from(FROM_FILE, 'all')
exif.save
@campanalbero
campanalbero / gist:9233245
Created February 26, 2014 16:40
Nikon の raw ファイルの exif のようなところから、撮影日を得る
require 'rubygems'
require 'mini_exiftool'
Dir.glob(['*.NEF']) do |f|
photo = MiniExiftool.new(f)
puts photo.DateTimeOriginal
end
@campanalbero
campanalbero / gist:6953766
Last active December 25, 2015 09:28
フォルダ内のファイルのMD5を計算して、ハッシュ値とファイル名を記録する。同じハッシュ値(コピーされたファイル)があれば、ファイル名をカンマ区切りで追記する。
require 'digest/md5'
hash = Hash.new {}
Dir.glob('*') do |f|
digest = Digest::MD5.file(f).to_s
if hash[digest] == nil then
hash.store(digest, f)
else
hash.store(digest, hash[digest] + ", " + f)
end
end