티스토리 뷰

이전에 한가지 방법을 소개했는데, 그 때의 스크립트를 좀 더 다듬어서 기능을 추가했다.

추가한 기능중 큰 것은 이미지나 동영상의 경우 메타데이터를 토대로 날짜별, 카메라기종별로 폴더를 만들어서 정렬해준다.

그래서 설치해야하는 모듈이 두가지 있다

Pillow설치: http://devst.tistory.com/106

PyExifTool설치: http://devst.tistory.com/108


주의 사항

파일 관련작업은 언제나 신중해야한다

모든 명령과 행동에 대해 실행 전에 심사숙고해라

이 글은 이 과정을 진행하면서 당신이 경험하게 될 그 어떤 실수에 대해서 책임 지지않는다


gather.cc53fea2a76725df2d07b7ea9d7522b9.py


중복파일 제거해서 파일의 해시값별로 정리하기

python gather.cc53fea2a76725df2d07b7ea9d7522b9.py -genhash data unique 23489239847238974


data 폴더에 있는 모든 파일들을 unique 파일로 옮기는데 이 과정에서 data 폴더 안에 디렉토리 트리 구조는 모두 제거한다.

즉 파일이 개별단위로 독립적으로 존재해도 무관한 자료의 경우에만 이 스크립트를 통해 처리해야한다.

디렉토리 트리구조 정보가 특별한 의미를 가지는 파일들의 경우에는 절대로 사용해서는 안된다.


파일이름이 abc.txt 라면

_;!#!;02fb1f9682bbe908bc4e003c475150b6;!#!;20160217210751;!#!;abc.txt 라고 이름지어서 unique/02f/02fb1f9682bbe908bc4e003c475150b6/ 폴더에 위치시킨다.

02fb1f9682bbe908bc4e003c475150b6 는 abc.txt 파일의 MD5해시값이다.

여기서 MD5해시값이란 파일의 내용을 토대로 생성되는 값이다.

a.txt, b.txt 두 파일이 있고 둘다 내용이 hello 라고 한다면 두 파일의 해시값은 같다.

만일 data 폴더에 같은 내용의 파일이 중복된다면, 중복되는 파일들은 옮기지 않고 제거한다.


파일이 jpg, jpeg, mov, mp4, cr2, nef, raf, avi 등의 이미지이거나 동영상 파일일 경우에는

unique_photo 폴더에 exif meta 정보를 토대로 날짜별로 넣는다.

unique_photo/2014/2014_07/2014_07_01_14_28_07_SHV-E330S,E330SKSUCNE2;!#!;3166ec449888e014bac5afc4e1be3dac;!#!;20141124101802;!#!;photo.jpg

이런 경로를 가지게 된다.

파일이름에서 3166ec449888e014bac5afc4e1be3dac 는 파일의 MD5해시값이다.

파일이름에서는 본래 파일의 이름은 제거된다.

그리고 2014_07_01_14_28_07_SHV-E330S,E330SKSUCNE2;!#!;17918854a8aecc5b7e99ff4ef7bc0e44;!#!;20141124101802;!#!;3166ec449888e014bac5afc4e1be3dac.json 라는 이름으로 exif 를 JSON 형태로 담아둔다. 그리고 여기에 원래 파일이름도 함께 담는다.


만약 동영상의 경우 맥에서 QuickTime 으로 화면동영상 캡춰기능으로 만들어진 파일의 경우에는 unique_pcLog 에 담으며 구조는 같다.



두 폴더의 내용을 같게 하기

python gather.cc53fea2a76725df2d07b7ea9d7522b9.py -syncfiles unique duplicate


unique 폴더와 duplicate 폴더를 비교해서 unique 에는 존재하는데 duplicate 에는 존재하지 않는 파일을 unique 로부터 복사해서 duplicate 에 넣는다

만약 duplicate 폴더가 존재하지 않는다면 전체를 복사하게될 것이다 (cp -r unique duplicate 와 같은 효과)


폴더 안에서 조건에 맞는 이름을 가진 파일을 찾아서 정해준 다른 폴더로 카피

python gather.cc53fea2a76725df2d07b7ea9d7522b9.py -pickfiles '\.cr2$|\.raf$' 500 cp unique duplicate


unique 폴더 안에서 파일이름이 \.cr2$|\.raf$ 정규표현식 조건에 매치되는 파일을 duplicate 폴더로 카피한다

만약 매치는되는데 duplicate 에 존재하는 파일이라면 카피하지 않는다


옵션중 500이라는 숫자의 의미는 카피할때에 만약 해당되는 파일이 1300개라면 

duplicate/100000/ 폴더에 500개

duplicate/100001/ 폴더에 500개

duplicate/100002/ 폴더에 300개

를 나눠서 카피해 넣는다


폴더 안에서 조건에 맞는 이름을 가진 파일을 찾아서 정해준 다른 폴더로 이동

python gather.cc53fea2a76725df2d07b7ea9d7522b9.py -pickfiles '\.cr2$|\.raf$' 500 mv unique duplicate

cp 가 아닌 mv 라고 바꿔주면 파일을 이동한다.

나머지는 cp 와 동일하게 작동한다.


폴더의 파일목록을 경로와 함께 표준출력으로 출력한다

python gather.cc53fea2a76725df2d07b7ea9d7522b9.py -listfile unique



댓글
댓글쓰기 폼
공지사항
Total
24,367
Today
33
Yesterday
34
링크
«   2018/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
글 보관함