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
# 遍历列表以检查它们
每个文件都创建了 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
# 遍历列表以检查它们