我制作了一个Python脚本,它使用checksumdir(https://github.com/cakepietoast/checksumdir)库根据目录的内容计算MD5哈希值。计算位于机械硬盘上的350mb目录的这个哈希需要几秒钟。
计算30gb目录的哈希需要很长时间。我还没有完成它,无论如何我发现12个多小时太长了。我不知道是什么导致这个,我能想到的一件事是350mb目录适合我的RAM内存,30gb不适合。在checksumdir中的块大小似乎是64 * 1024(65536),而且从我在Google中发现的这个似乎是一个合理的数字。
我还发现350mbdir包含466个文件,而30gb目录包含22696个文件。如果我推断我仍然无法解释所需的过多时间。
FWIW:我想使用该脚本查找具有重复内容的目录。我还没有发现任何应用程序。所以我想计算哈希并在HTML文件中显示最终结果。
相关代码:
#!/usr/bin/env python3
import os
import re
from checksumdir import dirhash # https://pypi.python.org/pypi/checksumdir/1.0.5
import json
import datetime
now = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M")
results = {}
sorted_results = {}
single_entries = []
compare_files = False
compare_directories = True
space_to_save = 0
html_overview = []
html_overview.extend(['<!DOCTYPE html>','<html>','<head>','<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">','</head>','<body>',' <table style="width:90%" class="table table-hover table-striped">', ' <tr>',' <td colspan=4></td>',' </tr>'])
# Configuration
root = "/home/jeffrey/Documenten" # Root directory to start search
create_hash = True
calculate_file_folder_size = True
compare_file_folder_names = False
sort_by = "hash" # Options: hash, size, name
json_result_file = 'result_' + now + '.json'
html_result_file = "DuplicatesHtml-" + now + ".html"
only_show_duplicate_dirs = True
remove_containing_directories = True
verbose_execution = True
# Calculate size of directory recursively - http://stackoverflow.com/questions/1392413/calculating-a-directory-size-using-python
def get_size(start_path = '.'):
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp) / 1048576 # size from bytes to megabytes
return total_size
# Calculate comparison properties, sort and save based on os.walk for recursive search
for dirName, subdirList, fileList in os.walk(root):
for dir in subdirList:
dir_name = dir
dir = os.path.join(dirName, dir)
if dir[0] != ".":
if verbose_execution = True:
print(dir)
if calculate_file_folder_size == True:
size = get_size(dir)
if verbose_execution = True:
print(size)
if create_hash == True:
hash = dirhash(dir, 'md5')
if verbose_execution = True:
print(hash)
results[dir] = [dir_name, size, hash]
答案 0 :(得分:0)
好的,所以我发现1个文件或多或少只是挂起了这个过程。我发现通过使用另一个Python函数来计算具有详细输出的哈希。当我删除该文件(我不需要它,Windows中的AppData目录中的东西)一切正常。供将来参考:使用第二代i5和SATA连接,大约900GB的数据需要半天时间来处理。我怀疑I / O会成为瓶颈。但那是我期待的时间。