Bash / shell / script md5哈希树输出到.csv文件

时间:2011-11-21 12:01:29

标签: bash shell scripting md5 md5sum

我需要使用bash / shell /脚本将md5sum哈希所有当前目录树文件​​散列为一个.csv文件,如下所示:

"index.php","add95c73ccafa79b4936cf7236a074f4"
"logs/index.html","1c7b413c3fa39d0fed40556d2658ac73"

非常感谢你;)

5 个答案:

答案 0 :(得分:3)

您可以尝试以下命令,但只有在以下情况下才能使用:

  • 文件名中没有"个字符
  • 您的文件名中没有换行符

如果没关系,那么这应该适合你:

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])

答案 1 :(得分:2)

尝试:

find . -type f -print0 | xargs -0 md5sum | perl -pe 's/^(.*?)\s+(.*)$/"$2","$1"/'
> md5.csv

答案 2 :(得分:0)

md5sum * | awk '{ print "\"" $2 "\",\"" $1 "\"" }'

答案 3 :(得分:0)

这应该有效

perl -pne 's/^"(.*)","([0-9a-f]+)"$/$2 *$1/io' < input | md5sum -c

答案 4 :(得分:0)

您可以按照以下所示进行操作。下面,我使用cksum实用程序来计算CRC校验和。您可以使用生成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