Así que típico y como estarán pensando conectamos el disco y lanzamos el photorec para recuperar todo, el cuestión es que queremos las fotografías y el disco duro es de 400 Gigas. Así que configuramos el photorec para que solamente nos recupera archivos jpg, en este caso las fotografias fueron guardadas durante varios años directamente de la camara.
Aún así, terminamos con muchisimos archivos recuperados y en diferentes carpetas donde fueron guardados. (Fueron 61 carpetas, casi 20 Gigas y casi 22 mil archivos). Para clasificar esto a mano pues puede llevar bastante tiempo, aquí es donde entra lo interesante de conocer el formato.
Al ser archivos de fotografías digitales, la cámara agrega datos EXIF al archivo, estos datos van desde la cámara que tomo la fotografía, características como distancia enfoque, tiempo de exposición, incluso algunas cámaras incluyen latitud y longitud para georeferenciar las fotos. Pero lo más importante ahora es la fecha.
Así que sabiendo esto, con un programa en python que lea los datos exif de los archivos, podremos discriminar los archivos y seleccionar solamente los que tengan estos datos, y renombrarlos por la fecha, en caso de no tener la fecha o que por alguna razón las fechas coincidan, pues dejamos el nombre original con el que fueron recuperadas.
Y de esta manera recuperamos 16 mil fotos, de casi 10 años.
A continuación el programa en python:
import exif
import shutil
lista = open("fotos1.jpg.txt","r").read().split("\n")
listafotos=[]
for item in lista:
print item
try:
data=exif.get_exif(item)
except:
data="NULL"
if data!="NULL":
try:
fecha=data['DateTime']
except:
fecha=item.split("/")[2]
if fecha[-1] == '\x00':
fecha = fecha[:-1]
if fecha not in listafotos:
listafotos.append(fecha)
else:
fecha=fecha+"-"+item.split("/")[2]
shutil.copy(item,"./Tusfotos/"+fecha)
y también la librería :
from PIL import Image
from PIL.ExifTags import TAGS
def get_exif(fn):
ret={}
i = Image.open(fn)
info = i._getexif()
for tag,value in info.items():
decoded = TAGS.get(tag, tag)
ret[decoded]=value
return ret