Portál AbcLinuxu, 8. listopadu 2025 18:59
#!/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.