- ベストアンサー
シェルでファイルのハッシュを取得する方法
シェル(.shのファイル)でフォルダに格納されている複数のファイルからファイル名、ハッシュをとって HASH.txtというファイルに以下のようなレイアウトで作りたいのです。 ファイル名,ハッシュ ・ ・ MD5というコマンドをつかえばハッシュがとれることは わかったのですが、これをどのようにファイルに書き込んでいくのか 方法がわかりません。 当方、UNIXをつかうのも初めてでどうしたらよいのか全然わかりません。(依頼してきた人も長期休暇中で困ってます) どこかサンプルや、解説があるようなHPでも構わないので どなたか教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
OSが何でmd5というコマンドの出力形式も分かりませんが、とりあえず手元にあるSolarisで同じようなことをするのであれば、 cshで foreach h (*) echo $h","`digest -a md5 $h`|tee -a /tmp/digest end とかするとできますが・・・ shやbash等では foreach h (*) とendの代わりに for h in $(ls);do とdoneを使って、 for h in $(ls);do echo $h","`digest -a md5 $h`|tee -a /tmp/digest done とかやるとできました。 おそらく、このdigest -a md5 の箇所をmd5というコマンドに置き換えるといいのだと思います。 とりあえず、コマンドに意味は カレントディレクトリにあるすべてのファイルに対して echo…のコマンドを実行する。 echoのところの意味は まずファイル名を表示し、","の後にdigestコマンドで出力されたmd5ハッシュ値を表示し、|teeで 表示されている実行結果を「/tmp/digest」というファイルに書き出すという内容です。 細かい使い方はそれぞれのコマンドを検索すると簡単に出てくると思います。
お礼
早速の回答ありがとう御座います OS等は・・・すみません忘れました。。 いきなり振られてきてなんだか良くわからず、 現状あるプログラムしか眺めていなかったので・・・。 休み明けに調べてきます
補足
訂正 Linuxでした。 また、色々調べ以下のよう中たちで進めています。 #ハッシュ情報をいれるファイルを作成 mktemp ${B8_DATA_DIR}/HASH.txt ハッシュ情報取得 md5sum ${B8_DATA_DIR}/xxx1.csv | awk '{printf("%s,%s\n",$2,$1)}' > ${B8_DATA_DIR}/B8HASH.txt 上記やり方だとHASH.txtに以下のように登録できました。 xxx1.csv,a7as8as9a8s9a8… 今回、3つのファイルの情報がとりたいので色々試していますがうまくいきません (1)単純に羅列 md5sum xxx1.csv | awk '{printf("%s,%s\n",$2,$1)}' > HASH.txt md5sum xxx2.csv | awk '{printf("%s,%s\n",$2,$1)}' > HASH.txt md5sum xxx3.csv | awk '{printf("%s,%s\n",$2,$1)}' > HASH.txt 結果、HASH.txtに最後の行だけしか登録されなかった (ハッシュの表記は適当です) xxx3.csv,a7as8as9a8s9a8… (2)for文を使う for arg in xxx1.csv xxx2.csv xxx3.csv do echo md5sum ${arg} | awk '{printf("%s,%s\n",$2,$1)}' > HASH.txt done 結果、HASH.txtに最後の行だけしか登録されなかった。 さらにハッシュ情報がとれなかった xxx3.csv,md5sum 希望はHASH.txtに以下のように登録できることです。 xxx1.csv,a7as8as9a8s9a8… xxx2.csv,s898wede8s9asa… xxx3.csv,d98de87d7ss7as… どなたかご助言お願い致します。