逐行比较目录中的校验和和store.txt文件中的校验和,以查看是否进行了更改

时间:2015-07-25 08:27:27

标签: bash loops for-loop

我的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

1 个答案:

答案 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