Photo organizer
Place this script file in a folder full of pictures, run it, and it will organize the pictures into folders by the day they were taken.
Ruby Version:
Run:
$ ruby picsort.rb
Code:
# filename: picsort.rb
#!/usr/bin/env ruby
require 'fileutils'
require 'exifr'
def picDate(file)
begin
ex = EXIFR::TIFF.new(file) || EXIFR::JPEG.new(file)
(ex.date_time).strftime "%Y%m%d" if ex.exif?
rescue
File.mtime(file).strftime "%Y%m%d"
end
end
def isPic?(file)
[".JPG",".JPEG",".PNG",".AVI",".WAV",".NEF",".MOV",".TIFF"]
.include? File.extname(file).upcase
end
print "Creating dirs"
Dir.foreach(".") do |f|
dt = picDate f
Dir.mkdir dt and print '.' if isPic? f unless File.directory? dt
end
print "\nMoving pics"
Dir.foreach(".") do |f|
FileUtils.mv(f, picDate(f)+'/'+f) and print '.' if isPic? f
end
puts
Python Version:
Run:
$ python picsort.py
Code:
# filename: picsort.py
from PIL import Image
from PIL.ExifTags import TAGS
import os
import time
from datetime import datetime
def get_exif(path):
ret = {}
i = Image.open(path)
info = i._getexif()
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded] = value
return ret
def picDate (path):
res = ""
try:
res = datetime.strptime(get_exif(path)['DateTimeOriginal'], "%Y:%m:%d %H:%M:%S")
except:
res = ""
return res
def isPic (path):
file, ext = os.path.splitext(path)
return (ext.upper() in [".JPG",".JPEG",".PNG",".NEF",".TIFF"])
import glob
for file in glob.glob('*'):
if isPic(file):
if picDate(file) != "":
dir = picDate(file).strftime("%Y-%m-%d")
if not(os.path.exists(dir)):
os.mkdir(picDate(file).strftime("%Y-%m-%d"))
os.rename(file, dir + '/' + file)
Clojure Version
January 2013 - Tools: Clojure