#!/usr/bin/env python
# -*- coding: utf-8 -*-
# поиск одинаковых файлов
#
import sys, os
import hashlib #
ex = 'zip'#'fb2'#'txt'#'mp4'#'gif'#'jpg'
GFiles = []
co = 0
LOut = []
def SaveInList(L3):
, ,if len(L3) > 0:
, , , ,global co
, , , ,global LOut
, , , ,for i in L3:
, , , , , ,LOut.append(i+'\n')
, , , , , ,co += 1
, , , ,LOut.append('-----\n\n')
def ScanMd5(L2):
, ,if len(L2) > 0:
, , , ,L3 = []
, , , ,L2.sort()
, , , ,flag = False
, , , ,oldMd5 = ''
, , , ,OldFile = ''
, , , ,for i in L2:
, , , , , ,m = i.split('%')
, , , , , ,ZMd5= m[0]
, , , , , ,if (not flag) and (ZMd5 == oldMd5):
, , , , , , , ,flag = True
, , , , , , , ,L3.append(OldFile)
, , , , , ,if flag:
, , , , , , , ,if ZMd5 == oldMd5:
, , , , , , , , , ,L3.append(m[1])
, , , , , , , ,else:
, , , , , , , , , ,flag = False
, , , , , , , , , ,SaveInList(L3)
, , , , , , , , , ,L3.clear()
, , , , , , , , , ,
, , , , , ,oldMd5 = ZMd5
, , , , , ,OldFile = m[1]
, , , ,SaveInList(L3) #
, ,
def ScanSize(GFiles):
, ,if len(GFiles) > 0:
, , , ,L = []
, , , ,flag = False
, , , ,oldSize = ''
, , , ,OldFile = ''
, , , ,for i in GFiles:
, , , , , ,m = i.split('%')
, , , , , ,Zaize = m[0]
, , , , , ,if (not flag) and (Zaize == oldSize):
, , , , , , , ,flag = True
, , , , , , , ,L.append(getmd5(OldFile)+'%'+ OldFile)
, , , , , ,if flag:
, , , , , , , ,if Zaize == oldSize:
, , , , , , , , , ,L.append(getmd5(m[1])+'%'+ m[1])
, , , , , , , ,else:
, , , , , , , , , ,flag = False
, , , , , , , , , ,ScanMd5(L)
, , , , , , , , , ,L.clear()
, , , , , , , , , , , ,
, , , , , ,oldSize = Zaize
, , , , , ,OldFile = m[1]
, , , ,ScanMd5(L) #
#--------------------------------------------------
def getmd5(file_name):
## try
with open(file_name, "rb" ) as file_to_check:
data = file_to_check.read()
return hashlib.md5(data).hexdigest()
def parse_file(fn):
, ,global GFiles
, ,s=str(os.path.getsize(fn))+'%'#
, ,GFiles.append(s+fn)
, , , ,
def parse_dir(sSrc):
, ,global f_list
, ,for file in os.listdir(sSrc):
, , , ,# full pathname
, , , ,file=os.path.join(sSrc,file)
, , , ,if os.path.isdir(file):
, , , , , ,parse_dir(file)
, , , ,else:
, , , , , ,m = file.split('.')[-1] # извлечение расширения
, , , , , ,m = m.lower()
, , , , , ,if (m == ex):
, , , , , , , ,parse_file(file)
, , , , , , , ,
#--------------------------------------------------
path = os.getcwd()
parse_dir(path)
GFiles.sort()
ScanSize(GFiles) #
if co > 0:
f = open('merg_'+ex+'.txt', 'w')
for i in LOut:
, , f.write(i+'\n')
f.close()
print('Done '+ex+' -> '+str(co))