我不知道可以执行此操作的标准 Linux 实用程序。如果文件适合您的基于内存的缓存,那么首先执行 md5sum 然后复制(副本将从内存中获取数据)不会那么低效。
您可以使用以下组合:
cat filename | tee remote_output_name | md5sum
Run Code Online (Sandbox Code Playgroud)
您可以修改它以直接md5sum
根据存储的 md5检查打印的总和。这仅从光盘读取文件一次。
假设你已经产生了check.md5
与
cd dir_with_big_files
md5sum * > check.md5
Run Code Online (Sandbox Code Playgroud)
,以下 Python 程序将复制和检查单个文件,一次以 64Mb 读取/写入。将其另存为 /usr/local/bin/chkcopy,chmod +x /usr/local/chkcopy
并使用chkcopy file_name check.md5 destination_filename_or_dir
#! /usr/bin/env python
import sys, os, hashlib
m = hashlib.md5()
file_name = sys.argv[1]
md5_name = sys.argv[2]
out_name = sys.argv[3]
if os.path.isdir(out_name):
out_name = os.path.join(out_name, file_name)
BUF_SIZE = 64 * (1024 ** 2)
with open(file_name, 'rb') as ifp:
with open(out_name, 'wb') as ofp:
buf = ifp.read(BUF_SIZE)
while buf:
m.update(buf)
ofp.write(buf)
buf = ifp.read(BUF_SIZE)
with open(md5_name) as fp:
for line in fp:
md5, fn = line.rstrip().split(' ', 1)
if fn == file_name:
assert m.hexdigest() == md5
break
else:
print('no md5 found for ' + file_name)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4537 次 |
最近记录: |