# dict : 중복파일 그룹
# result : 중복 파일 리스트 개수를 저장하기 위한 변수
print "\n* Start find same size files"
bigdupfile = {}
smalldupfile = {}
for key,value in dict.iteritems():
if result[value] != None and result[value] >= 2:
#if isDebugMode: print key
if value < LIMITED_SIZE:
if smalldupfile.get(value) != None:
smalldupfile[value].append(key)
else:
smalldupfile[value] = [key]
else:
if bigdupfile.get(value) != None:
bigdupfile[value].append(key)
else:
bigdupfile[value] = [key]
[전체코드]
#-*- coding: utf-8 -*-
import sys
import timeit
import os
myVersion = '-V0.627_170424b- Time:'
LIMITED_SIZE = 65536
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"
print "\n* Start find same size files"
bigdupfile = {}
smalldupfile = {}
for key,value in dict.iteritems():
if result[value] != None and result[value] >= 2:
#if isDebugMode: print key
if value < LIMITED_SIZE:
if smalldupfile.get(value) != None:
smalldupfile[value].append(key)
else:
smalldupfile[value] = [key]
else:
if bigdupfile.get(value) != None:
bigdupfile[value].append(key)
else:
bigdupfile[value] = [key]
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.7 파일 비교를 위한 함수를 추가
#파일에서 1024바이트를 읽어서 키값으로 쓴다.
def getMyHash(filepath):
chunksize = 1024
with open(filepath, 'rb') as afile:
buf = afile.read(chunksize)
buf = buf + '0.62700000000000000000000000000000000000000000000000000000000'
return buf[0:1024]
#두 개의 파일에서 65536바이트를 읽어서 비교한다.
def dofilecmp(f1, f2):
bufsize = LIMITED_SIZE
with open(f1, 'rb') as fp1, open(f2, 'rb') as fp2:
b1 = fp1.read(bufsize)
b2 = fp2.read(bufsize)
if b1 != b2:
return False