0

我需要 bash /shell/ 脚本来 md5sum 将所有当前目录树文件​​散列到一个 .csv 文件中,如下所示:

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

非常感谢您 ;)

4

5 回答 5

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])
于 2011-11-21T12:16:04.080 回答
2

尝试:

find . -type f -print0 | xargs -0 md5sum | perl -pe 's/^(.*?)\s+(.*)$/"$2","$1"/'
> md5.csv
于 2011-11-21T12:05:47.797 回答
0

这应该工作

perl -pne 's/^"(.*)","([0-9a-f]+)"$/$2 *$1/io' < input | md5sum -c
于 2011-11-21T12:12:28.603 回答
0

您可以如下所示进行。下面,我正在使用计算 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
于 2011-11-21T12:27:50.333 回答
0
md5sum * | awk '{ print "\"" $2 "\",\"" $1 "\"" }'
于 2011-11-21T12:07:20.303 回答