Ameba Ownd

アプリで簡単、無料ホームページ作成

なるーらぼ

[tips]フォルダ内のファイルのMD5ハッシュ値を取得する

2016.01.25 15:34

最近ではあまり使われなくなりつつありますが、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 ({ファイル名}) = {ハッシュ値}」を表示

日本語で記述すると、仕様書のようにも見えて面白いですね。