次のように、現在のすべてのディレクトリ ツリー ファイルを 1 つの .csv ファイルにハッシュする md5sum には、bash /shell/ スクリプトが必要です。
"index.php","add95c73ccafa79b4936cf7236a074f4"
"logs/index.html","1c7b413c3fa39d0fed40556d2658ac73"
どうもありがとうございます ;)
以下のコマンドを試すことができますが、次の場合にのみ機能します。
"
ファイル名に文字が含まれていません問題がなければ、これでうまくいくはずです:
find . -type f -print0 | xargs -0 md5sum | \
sed -r 's/^([0-9a-f]{32}) (.*)/"\2","\1"/'
それ以外の場合は、適切な CSV 引用を行う必要があります。その場合は、 csvモジュールを使用して、これを行うための短い Python スクリプトを作成することをお勧めします。例えば:
#!/usr/bin/env python
import os, csv, sys, subprocess, hashlib
writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL)
for directory, subdirectories, filenames in os.walk('.'):
for filename in filenames:
h = hashlib.md5()
full_filename = os.path.join(directory, filename)
with open(full_filename, 'rb') as f:
while True:
data = f.read(8096)
if len(data) == 0:
break
h.update(data)
writer.writerow([h.hexdigest(), full_filename])
試す:
find . -type f -print0 | xargs -0 md5sum | perl -pe 's/^(.*?)\s+(.*)$/"$2","$1"/'
> md5.csv
以下のようにできます。以下では、CRCチェックサムを計算するcksumユーティリティを使用しています。MD5チェックサムを生成するユーティリティを使用できます。出力を.csvファイルにリダイレクトできます。
#!/bin/ksh
for file in $(find $1 -type f)
do
filename=$(basename $file)
checksum=$(cksum $file | cut -d " " -f 1)
echo \"${filename}\",\"${checksum}\"
done
md5sum * | awk '{ print "\"" $2 "\",\"" $1 "\"" }'
これはうまくいくはずです
perl -pne 's/^"(.*)","([0-9a-f]+)"$/$2 *$1/io' < input | md5sum -c