2016-11-30 94 views
1

每個文件都有它的md5校驗和,在我的腳本查看它之前,所以這些.md5文件已經存在(它們是在文件爲tard之後立即生成的)。我正在檢查以確保沒有人更改任何文件,從創建時間到我看它的時間。Bash MD5checksum循環

我想要做的是循環這個列表,找到所有.md5校驗和,並將它們與實際文件的md5校驗和進行比較。

例子:這是我的目錄樣子......

-rwxr-xr-x 1 awiles awiles 209904416 Nov 29 17:53 590465-1_v1.200.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 17:53 590465-1_v1.200.tar.gz.md5* 
-rwxr-xr-x 1 awiles awiles 1341076 Nov 29 17:53 590466-1_v1.320.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 17:53 590466-1_v1.320.tar.gz.md5* 
-rwxr-xr-x 1 awiles awiles 214723375 Nov 29 18:03 590467-1_v2.700.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 18:03 590467-1_v2.700.tar.gz.md5* 
-r-xr-xr-x 1 awiles awiles 2482573113 Nov 29 18:02 590468-1_v1.020.tar.gz* 
-rwxr-xr-x 1 awiles awiles   46 Nov 29 18:02 590468-1_v1.020.tar.gz.md5* 
-rwxr-xr-x 1 awiles awiles 28043339 Nov 29 17:53 590505-1_v1.040.tar.gz* 
-rwxr-xr-x 1 awiles awiles   57 Nov 29 17:53 590505-1_v1.040.tar.gz.md5* 

我當前的bash代碼...

for f in $DIR/* 
do 
    if [[ $f == *".md5" ]] ; then 
     md5sum -c $f 
    fi 
done 

,我發現了以下錯誤......

md5sum: 590465-1_v1.200.tar.gz: No such file or directory 
590465-1_v1.200.tar.gz: FAILED open or read 
md5sum: WARNING: 1 listed file could not be read 

我在這裏做錯了什麼?

+0

'md5sum'試圖從當前目錄讀取文件名。你可以先cd到目錄。 –

回答

1

根據md5sum的輸出判斷,預計590465-1_v1.200.tar.gz位於當前目錄中。只有DIR.時,您的腳本纔會有效。 如果不是的話,那麼你應該cd$DIR第一,例如像這樣:

(
cd "$DIR" && for f in * 
do 
    if [[ $f == *".md5" ]] ; then 
     md5sum -c $f 
    fi 
done 
) 

我包裹在(...),讓你不必記得cd "$OLDPWD"當您完成。 (腳本中使用cd往往導致奇怪的錯誤是由於疏忽。)

-1

簡單的方法:

ls -1 *.md5 |while read line; do cat $line ; done|md5sum -c

一些類似的方式:

md5sum * > checklist.chk#生成校驗清單對於任何文件匹配*

md5sum -c checklist.chk#遍歷列表檢查它們