pyrmdup
중복파일을 제거하는 파이썬 스크립트
1. 기본 아이디어
검색할 폴더안의 파일들을 크기순으로 정렬 하여, 같은 크기가 2개 이상인 파일들을 그룹으로 묶기
같은 크기의 파일 그룹에 속한 파일들을 각각 1024바이트 씩 읽어서 같은 값인 파일들만 남기기
같은 그룹에 속한 파일들을 1:1로 비교
2. 구현
2.1 pyrmdup.py 생성
#-*- coding: utf-8 -*-
def main():
print "Hello!"
if __name__ == '__main__':
main()
2.2 옵션기능을 추가
-m : 발견된 중복 파일을 dupfiles 폴더로 옮김
-d : 자세한 로그를 출력하기
-h : 도움말을 보여줌
#-*- coding: utf-8 -*-
import sys
def main(folderlist):
isMoveFile = False
isDebugMode = False
#Check option
if '-m' in folderlist:
isMoveFile = True
folderlist.remove('-m')
print "* Remove duplicated files"
if '-d' in folderlist:
isDebugMode = True
folderlist.remove('-d')
print "* Show file list"
def printHelp():
print "\n[Help]"
print "Usage : pyrmdup [option] FolderName"
print "option:"
print " -d : print log"
print " -m : move all duplicated files to dupfiles folder"
print " -h : show help message"
if __name__ == '__main__':
if (len(sys.argv) < 2) or ('-h' in sys.argv[1:]):
printHelp()
else:
main(sys.argv[1:])
2.3 실행 시간을 확인하기 위한 코드를 추가
#-*- coding: utf-8 -*-
import sys
import timeit
myVersion = '-V0.627_170423c- Time:'
def main(folderlist):
isMoveFile = False
isDebugMode = False
#Check option
if '-m' in folderlist:
isMoveFile = True
folderlist.remove('-m')
print "* Remove duplicated files"
if '-d' in folderlist:
isDebugMode = True
folderlist.remove('-d')
print "* Show file list"
def printHelp():
print "\n[Help]"
print "Usage : pyrmdup [option] FolderName"
print "option:"
print " -d : print log"
print " -m : move all duplicated files to dupfiles folder"
print " -h : show help message"
if __name__ == '__main__':
start_time = timeit.default_timer()
if (len(sys.argv) < 2) or ('-h' in sys.argv[1:]):
printHelp()
else:
main(sys.argv[1:])
print '\n', myVersion, timeit.default_timer()-start_time
2.4 입력된 폴더의 모든 파일을 출력
#-*- coding: utf-8 -*-
import sys
import timeit
import os
myVersion = '-V0.627_170423c- Time:'
def main(folderlist):
isMoveFile = False
isDebugMode = False
#Check option
if '-m' in folderlist:
isMoveFile = True
folderlist.remove('-m')
print "* Remove duplicated files"
if '-d' in folderlist:
isDebugMode = True
folderlist.remove('-d')
print "* Show file list"
folders = folderlist
print '* Folders :'
for f in folders:
print f
print "* Start read files"
for folder in folders:
if os.path.exists(folder):
for (path, dir, files) in os.walk(folder):
for filename in files:
tf = os.path.join(path, filename)
print tf
else:
print "Error:",folder," is not exist"
def printHelp():
print "\n[Help]"
print "Usage : pyrmdup [option] FolderName"
print "option:"
print " -d : print log"
print " -m : move all duplicated files to dupfiles folder"
print " -h : show help message"
if __name__ == '__main__':
start_time = timeit.default_timer()
if (len(sys.argv) < 2) or ('-h' in sys.argv[1:]):
printHelp()
else:
main(sys.argv[1:])
print '\n', myVersion, timeit.default_timer()-start_time
2.5 입력된 폴더의 모든 파일을 읽어서 같은 크기 끼리 그룹으로 묶음
#-*- coding: utf-8 -*-
import sys
import timeit
import os
myVersion = '-V0.627_170423c- Time:'
def main(folderlist):
isMoveFile = False
isDebugMode = False
#Check option
if '-m' in folderlist:
isMoveFile = True
folderlist.remove('-m')
print "* Remove duplicated files"
if '-d' in folderlist:
isDebugMode = True
folderlist.remove('-d')
print "* Show file list"
folders = folderlist
print '* Folders :'
for f in folders:
print f
print "* Start read files"
dict = {} #폴더안의 모든 파일을 읽어서, Kye=이름:value=크기 로 저장
result = {} #중복 파일 리스트를 저장하기 위한 변수
for folder in folders:
if os.path.exists(folder):
for (path, dir, files) in os.walk(folder):
for filename in files:
tf = os.path.join(path, filename)
if isDebugMode: print tf
dict[tf] = os.path.getsize(tf);
if isDebugMode: print ("%s : %d" % (tf, dict[tf]))
if result.get(dict[tf]) == None:
result[dict[tf]] = 1
else:
result[dict[tf]] += 1
else:
print "Error:",folder," is not exist"
def printHelp():
print "\n[Help]"
print "Usage : pyrmdup [option] FolderName"
print "option:"
print " -d : print log"
print " -m : move all duplicated files to dupfiles folder"
print " -h : show help message"
if __name__ == '__main__':
start_time = timeit.default_timer()
if (len(sys.argv) < 2) or ('-h' in sys.argv[1:]):
printHelp()
else:
main(sys.argv[1:])
print '\n', myVersion, timeit.default_timer()-start_time
'Project > pyrmdup' 카테고리의 다른 글
[Pyrmdup] 중복 파일 제거 툴 0.627_0424b (4) | 2017.04.24 |
---|---|
[Pyrmdup] 중복 파일 제거 툴 0.627_0423c (0) | 2017.04.23 |
중복 파일 제거 프로그램 작성하기 (0) | 2017.04.18 |