2011-11-21 72 views
0

我需要的bash /殼/腳本的md5sum散列所有當前目錄樹中的文件到一個單獨的.csv文件是這樣的:猛砸/殼/腳本MD5哈希樹輸出到.csv文件

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

非常感謝你很多;)

+1

你應該真的*嘗試*的東西,回來的問題,而不是要求人們爲你寫代碼。 –

+0

Srrry Noufal,但這是我的大問題;) –

回答

2

嘗試:

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

是的,工作像魅力,但輸出是這樣的: –

+0

dd5d02cc750d2855cf6f6c5bf5bea587 ./language/index.html –

+0

@EvanPalMcDan:請嘗試我修改後的命令。 – codaddict

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

如果文件名有空格,則會失敗。 – codaddict

+0

謝謝!使用正確的輸出像這樣,但我需要它通過所有目錄遞歸處理,沒有此錯誤:md5sum:templ:是目錄 「index.php」,「31fa74772d49e0c661ce8ee28f52b590」 –

0

這應該工作

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

ThX,但我在UNIX操作系統;) –

+0

@EvanPalMcDan:再來一次?你認爲我的解決方案是什麼? – sehe

+0

我沒有在樹上的exe文件;)md5sum.exe:命令未找到 –

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

謝謝Mark,Work Like Charm :) –

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 
+0

工作完美,但沒有文件路徑:( –

+0

如果你需要輸出完整的文件路徑,那麼請檢查以下內容 #!/ bin/ksh for $(find $ 1 -type f) do checksum = $(cksum $ file | cut -d「」-f 1) echo \「$ {file} \」,\「 $ {checksum}「 完成 – Drona