ディレクトリに大量のファイルがある場合は、次を使用できますos.path.basename
。
import os
>>> dst = os.path.basename('/root/dst/file1.file')
>>> src = os.path.basename('/root/src/file1.file')
>>> dst
'file1.file'
>>> src
'file1.file'
>>> dst == src
True
サブディレクトリを扱っている場合は、ベースの src および dst ディレクトリを把握してから、各パスの先頭からそれらを削除する必要があります。
>>> src = '/root/src'
>>> dst = '/root/dst'
>>> src_file = '/root/src/dir1/file1.file'
>>> dst_file = '/root/dst/dir1/file1.file'
>>> os.path.relpath(src_file, src)
'dir1/file1.file'
>>> os.path.relpath(dst_file, dst)
'dir1/file1.file'
>>> os.path.relpath(src_file, src) == os.path.relpath(dst_file, dst)
True
これを関数と組み合わせると、次のようになります。
import os
src = '/root/src'
dst = '/root/dst'
for key, src_file in md5Srt.iteritems():
dst_file = md5Dst.get(key)
if dst_file is None:
print 'The destination is missing %s' src_file
continue
print "keys match " + key
print '\ncomparing the values of files\n'
if os.path.relpath(src_file, src) == os.path.relpath(dst_file, dst)
print srcFile
print dst_file
print "files match\n"
print "checking the next pair"
else:
print "values of files don't match"
dst
のファイルと同じ md5sum を持つ のファイルを見つけて、ファイルを比較しようとすることを再考する必要があると思いますsrc
。ファイルの名前が変更された場合、または同じハッシュを持つ 2 つのファイルがある場合、完全に同じではないディレクトリになる可能性があります。より良い方法は、最初にファイル名を比較してから、 と の両方にファイルがあるかどうか md5sums を確認することsrc
ですdst
。
これは次のようになります。
import os
src_dir = '/root/src'
dst_dir = '/root/dst'
# reverse the dictionaries, hopefully you would create these dictionaries
# to begin with. A single file can only have one md5sum, but the same md5Sum can
# match multiple files
src_file_hashes = dict((os.path.relpath(v, src_dir), k) for k, v in md5Srt)
dst_file_hashes = dict((os.path.relpath(v, dst_dir), k) for k, v in md5Dst)
for src_file, src_hash in src_file_hashes.iteritems():
dst_hash = dst_file_hashes.get(src_file)
src_path = os.path.join(src_dir, src_file)
dst_path = os.path.join(dst_dir, dst_file)
if dst_hash is None:
print 'The destination file %s is missing ' % dst_path
continue
if src_hash == dst_hash:
print '%s matches %s and %s' % (src_hash, src_path, dst_path)
else:
print '%s and %s have different hashes' % (src_path, dst_path)