Bash MD5校验和循环

Bash MD5checksum loop

每个文件都创建了 md5 校验和,在我的脚本查看它之前,所以这些 .md5 文件已经存在(它们是在文件迟到之后立即创建的)。我正在检查以确保没有人更改任何文件,从创建文件到我查看文件。

我想做的是遍历此列表,找到所有 .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

我哪里做错了?

根据 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 通常会由于疏忽而导致奇怪的错误。)

简单方法:

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

一些类似的方式:

md5sum * > checklist.chk # 为匹配 *

的任何文件生成校验和列表

md5sum -c checklist.chk # 遍历列表以检查它们