[tips]フォルダ内のファイルのMD5ハッシュ値を取得する
最近ではあまり使われなくなりつつありますが、MD5というハッシュ値を取得するものです。
Linuxの場合
md5sumというコマンドラインツールがインストールされています。
このコマンドを利用することで一覧を取得することができます。
md5sum ./*
Macの場合
こちらも最初からmd5という名前のコマンドラインツールがインストールされています。
このコマンドを利用することで一覧を取得することができます。
md5 ./*
Windowsの場合
Windowsには最初からのコマンドはインストールされていません。
ですので、ツールをインストールするか簡単なスクリプトを記述するようになります。
FCIVを利用する
可用性とは、ファイル チェックサム整合性検証ユーティリティの説明
https://support.microsoft.com/ja-jp/kb/841290
こちらはMicrosoft製のツールです。しかし、サポートはされていません。
インストールすることで、FCIVというコマンドが利用できるようになります。
FCIV -md5 .¥*
PowerShellを利用する
ただしバージョン4からのものでしか利用できません。
Get-FileHashコマンドレットを利用します。
Get-ChildItem -File | Get-FileHash
PHPを利用する
お仕事でPHPを利用されているという場合はPHPで少しのスクリプトを記述すれば実現することができます。
<?php
function getFileHash($dir){
$files = glob($dir . "/*");
foreach($files as $file){
if(is_file($file)){echo("MD5 (" . $file . ") = " . md5_file($file) . "¥n");
}
}
}
getFileHash(".");
波かっこがあるので少し長く見えますね。
Rubyを利用する
Windowsでもお仕事でRubyを利用されている方も多くなったと思います。
Rubyでも同じように記述すれば実現することができます。
require "digest/md5"
def getfilehash(d)
Dir.glob("#{d}/*").each do |f|
puts "MD5 (#{f}) = #{Digest::MD5.file(f)}" if File.file?(f)end
end
getfilehash(".")
Rubyではif文を後ろに配置することができるので、短く記述できます。
Pythonを利用する
Windowsでもデータの統計をするためにPythonを利用する方が増えていると思います。
Pythonでも同じように記述すれば実現することができます。
import hashlib
import glob
import os
def getfilehash(d):files = glob.glob("%s/*" % (d))
for f in files:
if os.path.isfile(f):
print("MD5 (%s) = %s" % (f, md5file(f)))
def md5file(filename):
with open(filename, "rb") as f:
da = f.read()
return hashlib.md5(da).hexdigest()
getfilehash(".")
PythonではファイルのMD5値を取得する簡単な方法がありません。
サイズの大きなファイルでは上記に示したmd5file関数において一定のサイズごとにファイル読み込みを行うようにする必要があります。
Node.jsを利用する
Microsoftがサポートしていることもあって、数年前からNode.jsもWindowsで簡単に導入することができるようになりました。
Pythonよりも少し記述が複雑ですが、実現することができます。
var fs = require('fs');
var crypto = require('crypto');
function getfilehash(dir){
fs.readdir(dir, function(err, files){if(err) throw err;
files.filter(function(file){
return fs.statSync(file).isFile() && /.*$/.test(file);
}).forEach(function(file){
console.log("MD5 (" + file + ") = " + md5file(file));
});
});
}
function md5file(filepath){
var hash = crypto.createHash('md5');
hash.update(filepath, 'binary');
return hash.digest('hex');
}
getfilehash(".");
日本語プログラミング言語なでしこを利用する
結構むかしから存在する、この「なでしこ」ですが、便利な機能がいくつもあるので、こうしたちょっとした作業ははかどります。
しかも、日本語で記述することができます。
対象フォルダはマイドキュメント。
「{対象フォルダ}*」のファイル列挙。
ファイル一覧はそれ。
ファイル一覧を反復
ファイル名はそれハッシュ値はファイル名のMD5取得。
「MD5 ({ファイル名}) = {ハッシュ値}」を表示
日本語で記述すると、仕様書のようにも見えて面白いですね。