2016-11-30 48 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#遍历列表检查它们