두 디렉토리가 같은 구조를 갖고 같은 파일들이 있는지를 비교해주는 파이썬 코드.
파일의 비교는 md5sum을 갖고 비교.
메모리 문제와 속도 문제로 파일의 md5sum을 계산 시에는 1GB씩 읽어오는 방식 이용.
사용법: ./compareDirs.py [directory1] [directory2]
다운로드: compareDirs.py
소스코드:
#!/usr/bin/python
import os, sys, stat, hashlib
# Check arguments
if len(sys.argv) != 3:
print 'Usage: ./compareDirs.py [Directory] [Directory]'
sys.exit(0)
# Variables
BLOCK_SIZE = 1024000000
dir1 = sys.argv[1]
dir2 = sys.argv[2]
# Iterate over files
for rootdir, subdirs, files in os.walk(dir1):
for filename in files:
pathname1 = os.path.join(rootdir, filename)
pathname2 = os.path.join(rootdir.replace(dir1, dir2, 1), filename)
if not os.path.exists(pathname2):
print pathname2 + ' does not exist.'
continue
print 'Compare ' + pathname1 + ' and ' + pathname2
# Regular file only
if stat.S_ISREG(os.stat(pathname1).st_mode):
if stat.S_ISREG(os.stat(pathname2).st_mode):
f1 = open(pathname1, 'rb')
f2 = open(pathname2, 'rb')
# Compute MD5 by reading 8192-byte blocks
f1_md5 = hashlib.md5()
f2_md5 = hashlib.md5()
while True:
block = f1.read(BLOCK_SIZE)
if not block:
break
f1_md5.update(block)
while True:
block = f2.read(BLOCK_SIZE)
if not block:
break
f2_md5.update(block)
# print f1_md5.digest()
# print f2_md5.digest()
if f1_md5.digest() != f2_md5.digest():
print '\tDifferent.'
else:
print '\tSame.'
댓글