扫描目所有文件,并计算md5值和sha1值

扫描某个目录下所有文件,并计算出md5值和sha1值,之后保存到文件里面。

由于最近需要做一个下载站,下载站上放的是我们软件,以及一些工具文件,需要做一个md5值和sha1值,以便下载者核对该值,确保文件在下载过程中,不被中间人篡改。

为此,我写了一个脚本,用来扫描某个目录下的文件,然后计算出对应文件的 md5值和 sha1值,并写入到一个文本文件里面。

由于有的文件比较大,单个文件达到 GB 以上,这样每次计算都比较耗时,所以,在脚本中,加入了判断。

首先会查找目录下所有文件,之后依次判断每个文件是否已经存在 md5 值 和 sha1 值的文本文件存在(计算出值存放在文本文件里面),如果文件存在,则会比较该文件是否比原文件新,或是值文件比原文件新,则代表原文件没有修改过,若是旧,则说明原文件修改过。(我们总是先修改文件,再计算MD5和sha1 值,所以值文件一定比原文件新)。

脚本第三行,为你的要计算的文件路径,也就是我的下载站根目录,由于根目录我只放目录,没有文件,所以这个目录下的文件,不会被计算,若您需要计算,可自行修改下。

脚本执行后,会生成两个.txt 文件,分别为原文件的文件名+md5.txt 和 原文件名+sha1.txt

以下是脚本源代码:

#!/bin/bash

cd /var/www/html/download
s_dir=$(pwd)
find * -type d | while read dir
	do
		cd $dir
		find * -not -name "*.md5.txt" -not -name "*.sha1.txt" -maxdepth 0 -type f | while read file
			do
				if [ -f ${file}.md5.txt ]; then
					if [ ${file}.md5.txt -ot ${file} ]; then
						md5sum ${file} | awk '{print $1}' > ${file}.md5.txt
					fi
				else
					md5sum ${file} | awk '{print $1}' > ${file}.md5.txt
				fi
				if [ -f ${file}.sha1.txt ]; then
					if [ ${file}.sha1.txt -ot ${file} ]; then
						sha1sum ${file} | awk '{print $1}' > ${file}.sha1.txt
					fi
				else
					sha1sum ${file} | awk '{print $1}' > ${file}.sha1.txt
				fi				
			done
		cd $s_dir
	done

 

此脚本您可以放到计划任务里面,根据您的文件变化频繁程度,决定每次执行的间隔,当然若您的文件变动不频繁,也可以每次有变动后手动执行。

执行脚本后,会生成两个.txt 结尾的文件,文件名原文件伯保持一致,如下图所示,是我们的软件镜像下载站。

 

猜您喜欢