Skip to content

Instantly share code, notes, and snippets.

@gkleiman
Created August 29, 2013 23:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gkleiman/6384488 to your computer and use it in GitHub Desktop.
Save gkleiman/6384488 to your computer and use it in GitHub Desktop.
Sort pictures by date
#!/usr/bin/env ruby
require 'fileutils'
require 'exifr'
def parse_options
if ARGV.size != 2
puts "Invalid parameters"
exit 1
end
options = {}
options[:input_dir] = ARGV[0]
options[:output_dir] = ARGV[1]
return options
end
def load_pics(options)
pics = {}
files = Dir["#{options[:input_dir]}/**/*.{JPG,jpg,jpeg,JPEG}"]
files.each do |filename|
pics[filename] = EXIFR::JPEG.new(filename).date_time
end
return pics
end
def copy(pics, options)
pics.each do |filename, date|
dst_dir = File.join(options[:output_dir], date.year.to_s, date.month.to_s.rjust(2, '0'), date.day.to_s.rjust(2, '0'))
dst = File.join(dst_dir, File.basename(filename))
FileUtils.mkdir_p(dst_dir, :verbose => true)
FileUtils.cp(filename, dst, :verbose => true, :preserve => true)
end
end
options = parse_options
copy(load_pics(options), options)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment