我需要一个智能的复制功能,用于可靠和快速的文件复制和链接。这些文件非常大(从几个GB到超过200GB),分布在许多文件夹中,人们可能在一天内重命名文件甚至文件夹,因此我想使用哈希来查看是否已经复制了文件,可能使用不同的名称,在这种情况下只创建链接。
我完全不了解哈希,我正在使用这个函数来进行哈希:
import hashlib
def calculate_sha256(cls, file_path, chunk_size=2 ** 10):
'''
Calculate the Sha256 for a given file.
@param file_path: The file_path including the file name.
@param chunk_size: The chunk size to allow reading of large files.
@return Sha256 sum for the given file.
'''
sha256 = hashlib.sha256()
with open(file_path, mode="rb") as f:
for i in xrange(0,16):
chunk = f.read(chunk_size)
if not chunk:
break
sha256.update(chunk)
return sha256.hexdigest()
这需要一分钟处理3GB的文件,所以最终对于一个16TB的硬盘来说,这个过程可能非常慢。
现在我的想法是利用有关文件内部结构的其他知识来加快速度:我知道它们包含一个小标题,然后是很多测量数据,并且我知道它们包含实时时间戳,所以我相当确定两个文件的前16MB相同的概率非常低(要发生这种情况,必须在完全相同的环境条件下恰好在同一时间创建两个文件)。因此,我的结论是只需要对每个文件的前X MB进行哈希处理就足够了。
这在我的示例数据中有效,但由于我没有经验,所以我想问问是否有我不知道的东西(隐藏的危险或更好的方法)。
非常感谢!