※ 2014-12 に記述したメモです。Gist にアップロードした時点と比べて内容が古い可能性があります
PowerShell の v4 以降であれば Get-FileHash
が使える.
ただし、sha256sum のようなフォーマットでは出力されないので、 とりあえず以下のようにする.
PS> Get-ChildItem . | Get-FileHash -Algorithm SHA256 | ForEach-Object { $_.hash + " *" + (($_.path | Resolve-Path -Relative) -replace '^\.\\' , '') }
これが動けば、これでもいいのだが、
日本語のパス(だと思う) の場合 Resolve-Path -Relative
の出力がおかしい(?) ときがある.
絶対パスとか子フォルダを使うこともまずないので、 以下のようにしてしまうという手もなくはない.
PS> Get-ChildItem . | Get-FileHash -Algorithm SHA256 | ForEach-Object { $_.hash + " *" + ($_.path | Split-Path -Leaf) }
なお、ファイルにリダイレクトした場合、
- 同じディレクトにリダイレクトするとエラーになる
- UTF-16LE の CRLF 改行になっている.
UTF-16LE の CRLF の方はvim
で開いて、:set fileencoding=utf8
:set fileformat=unix
を実行して保存.
これだと、まだ BOM が付いているので vim -b foo.sha
で開いて BOM を消す.
vim
で変換は面倒なので、考え中.
これでいけると思う
$ cat foo.sha | iconv -f utf16 -t utf8 | tr -d "\r" | sha256sum -c
License: CC0 1.0 http://creativecommons.org/publicdomain/zero/1.0/deed.ja