我的bash脚本遇到问题,我需要比较来自/ axa / backup /目录的备份文件的校验和以及存储校验和的store.txt文件以确保不存在已经做出了改变。我需要使用for循环和if-else循环,但它似乎不起作用,因为我很少使用它。
这是我写的bash脚本:
#!/bin/bash
for md5sum in /sads/backup/*.tgz
do
if [ "md5sum" = cat store.txt ]
then
echo "no changes made in /sads/backup/*.tgz "
else
echo "Changes made in /sads/backup/*.tgz "
fi
done
答案 0 :(得分:0)
生成所有文件的MD5校验和:
find /sads/backup -type f -name '*.tgz' -exec md5sum {} + > checksums.txt
验证所有文件是否与校验和匹配:
if md5sum --check --status checksums.txt
then
echo "No changes"
else
echo "Changed files"
fi
一些注意事项:
md5sum
中的某个文件丢失,则checksums.txt
将失败,但如果新文件不在,则不将失败已添加checksums.txt
。如果要查看每个文件的状态,请删除--status
:
md5sum --check checksums.txt | grep --invert-match ': OK$'
md5sum
替换为sha256sum
。以上命令做处理奇怪命名的文件:
$ cd -- "$(mktemp --directory)"
$ echo a > files/a
$ echo $'a\nz' > $'files/a\nz'
$ echo z > files/z
$ find files -mindepth 1 -exec md5sum {} + > checksums.txt
$ md5sum --check checksums.txt
files/z: OK
files/a
z: OK
files/a: OK
$ echo fail > $'files/a\nz'
$ md5sum --check checksums.txt
files/z: OK
files/a
z: FAILED
files/a: OK
md5sum: WARNING: 1 computed checksum did NOT match