#!/usr/bin/env ruby cams = { "SIGMA DP2 Merrill" => "dp2m", "FP2" => "fp2", "Canon EOS 1000D" => "1000d", "iPad Air" => "ipadair" } cams.default = "default" ids = [] while line = STDIN.gets # list of files a = line.split('.') a.pop ids << a.join '.' end ids.uniq! used_prefixes = {} # prefix -> 0..N ids.each do |i| exif = `exiv2 #{i}.jpg 2>/dev/null` a = exif.split "\n" timestamp = nil cam = nil a.each { |j| if j.start_with? "Camera model" cam = j elsif j.start_with? "Image timestamp" timestamp = j next else next end } begin t = timestamp.split(':',2)[1].strip.gsub(/(:|\ )/, '-') c = cams[cam.split(':',2)[1].strip] new_prefix = "#{t}-#{c}" add = 1 while used_prefixes.has_key? new_prefix new_prefix = "#{t}-#{add}-#{c}" add += 1 end used_prefixes[new_prefix] = true Dir.glob("#{i}*").each { |f| ext = f.gsub(/^#{i}/,"") if File.exists? "#{new_prefix}#{ext}" puts "File exists: #{new_prefix}#{ext}, exiting!" exit end `mv #{i}#{ext} #{new_prefix}#{ext}` } rescue puts "Error @#{i}" end end