본문
카메라로 사진을 찍으면, 날짜별로 폴더가 생성되서 사진을 날짜별로 정리하기가 쉬운데,
요즘 휴대폰으로 사진을 찍다보니 날짜별로 정리가 안된다.
뷰어의 힘을 빌려 그냥 볼까 하다가, 그것도 딱히 맘에 들지 않아,
결국, python으로 만들었다.
EXIF 정보가 있으면 그 정보를 이용하여 날짜별로 디렉토리를 생성하여 복사.
EXIF 정보가 없으면, 파일명에서 유추하여 날짜별로 복사.
둘다 실패하는 경우 그냥 Unknown 폴더로 복사.
하도록 하였다.
exif 정보를 읽기위해서는 exif-py-1.3.3 을 사용하였다.
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- import sys
- import getopt
- import logging
- import timeit
- import os
- import shutil
- import re
- from exifread.tags import DEFAULT_STOP_TAG, FIELD_TYPES
- from exifread import process_file
- def using():
- print "cmd src dest"
- def copyfile(dst, datefolder, orgfile):
- dstfolder = os.path.join(dst, datefolder)
- if not os.path.exists(dstfolder) :
- os.makedirs(dstfolder)
- shutil.copycopy(orgfile, dstfolder)
- print "Copy " + orgfile + " To " + dstfolder
- def estimateDateByFileName(fname) :
- #checker = re.compile(r'\d{4}\d{2}\d{2}')
- checker = re.compile(r'(19|20\d\d)[-_ ]?(0[1-9]|1[012])[-_ ]?(0[1-9]|[12][0-9]|3[01])')
- m = checker.search(fname)
- if m :
- print m.groups()
- #print m.group(0)
- return m.group(1)+"_"+m.group(2)+"_"+m.group(3)
- else :
- return "unknown"
- def main():
- if len(sys.argv) < 3 :
- using()
- sys.exit(0)
- src = sys.argv[1]
- dst = sys.argv[2]
- for f in os.listdir(src) :
- print f
- ff = os.path.join(src, f)
- if os.path.isfile(ff) :
- ef = open(ff, 'rb')
- tags = process_file(ef, stop_tag = 'EXIF DateTimeOriginal')
- if not tags :
- datefolder = estimateDateByFileName(f)
- copyfile(dst, datefolder, ff)
- continue
- """
- for tag in tags.keys():
- if tag not in ('JPEGThumbnail', 'TIFFThumbnail', 'Filename', 'EXIF MakerNote'):
- print "Key: %s, value %s" % (tag, tags[tag])
- """
- try :
- oriTime = str(tags["EXIF DateTimeOriginal"]).split(" ")[0].split(":")
- #print oriTime[0], oriTime[1], oriTime[2]
- datefolder = oriTime[0]+"_"+oriTime[1]+"_"+oriTime[2]
- #print datefolder
- copyfile(dst, datefolder, ff)
- ef.close()
- except :
- datefolder = estimateDateByFileName(f)
- copyfile(dst, datefolder, ff)
- if __name__ == '__main__':
- main()
python을 사용하시는 분은 소스파일을 다운 받아 사용하시고, 아니신 분들은 exe 파일을 다운 받아 사용하시면 됩니다.
사용방법은 cmd창에서
makeFolderByEXIF.exe "[소스폴더]" "[대상폴더]"
입니다.
2012-12-24 00.22.26.png
20120714_153524.jpg
P20120516_165526000_21196233-5803-4182-AD41-9D3E4FD7CEB4.PNG
V20120501_230422000_E369AB99-8CEE-4182-865F-0B23B54EF9A9.mp4
VID_20130201_075752.mp4
위와 같은 패턴들에 대하여 잘 동작하는 것 까지 확인했음.
================================== UPDATE
Google의 picasa에서 디렉토리 명이 아니라 생성 날짜를 보고 정렬을 해줘서...
디렉토리 생성 시 생성 날짜를 변경하도록 변경.
'컴퓨터 이야기' 카테고리의 다른 글
iptables (0) | 2013.11.27 |
---|---|
Immunity Debugger가 Just In Time Debugger(JIT)로 설정이 잘 안될 때. (0) | 2013.11.25 |
[jquery] ajaxStart 이벤트가 발생하지 않을 때?.. (0) | 2013.05.22 |
ubuntu 12.04 LTS에서 원격데스크탑 설정 방법 (2) | 2013.05.13 |
티스토리에 소스코드 올릴 때 SyntaxHighlighter 사용하지 않고 올리는 방법 (0) | 2013.05.10 |