Portál AbcLinuxu, 10. května 2025 05:51
#!/usr/bin/env python import os,md5 def CalcMD5(filename): buffersize = 1000000 sum = md5.new() f = open(filename) while True: data = f.read(buffersize) if not data: break sum.update(data) f.close() return sum.hexdigest() def removefile(name): print 'removing', name # os.remove(name) def removeduplicit(filelist): md5sums = {} for name in filelist: sum = CalcMD5(name) if not md5sums.has_key(sum): md5sums[sum] = name continue name1 = md5sums[sum] name2 = name print 'duplicit files: ', name1, name2 if os.path.getctime(name1) > os.path.getctime(name2): removefile(name1) md5sums[sum] = name2 else: removefile(name2) path = '.' sizes = {} for root, dirs, files in os.walk(path): for file in files: name = os.path.join(root, file) if not os.path.isfile(name): continue size = os.path.getsize(name) if sizes.has_key(size): sizes[size].append(name) else: sizes[size] = [name] for k in sizes.keys(): if len(sizes[k]) > 1: removeduplicit(sizes[k])Ten program najde v aktuálním adresáři všechny soubory se stejným obsahem (název se může lišit), ponechá jen ten nejnovější a ostatní smaže.
find ./ -type f -print0 | xargs -0 md5sum | sort | \ awk '{ if (md5 == $1) print cesta,$2; md5=$1; cesta=$2 }Nestačilo by to?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.