SHA-1 Sum Every File

Easiest way to check whether file is valid after download is to grab it's SHA-1 sum. Most commonly it has same name as file but with additional .sha1 extension (e.g. temp.zip would have SHA-1 sum in temp.zip.sha1). One annoyance is how to generate all those .sha1 files...

To make my life little bit easier, I made a bash script. This script will go through given directories and create all SHA-1 sums. I use content and download directories in this case:

#!/bin/bash
for file in ~/public_html/{content,download}/*
do
if [ -f "$file" ]
then
if [ ${file: -5} != ".sha1" ]
then
file1=$file
file2="$file1.sha1"
file1Sum=`sha1sum $file1 | cut --delimiter=' ' -f 1`
if [ -e "$file2" ]
then
file2Sum=`cat $file2`
if [ "$file1Sum" == "$file2Sum" ]
then
echo " $file1"
else
echo "X $file1"
echo "$file1Sum" > "$file2"
fi
else
echo "+ $file1"
echo "$file1Sum" > "$file2"
fi
else
file1=${file%.sha1}
file2=$file
if [ ! -e "$file1" ]
then
echo "- $file1"
rm "$file2"
fi
fi
fi
done

Probably some explanation is in order. Script check each file in content and download directories. If file ends in .sha1 (bottom of the script), we will just remove that file and log action with minus (-) sign. This serves as clean-up for orphaned SHA-1 sums.

If file does exist, we need to check existing SHA-1 sum. If there is no sum script will just create one and log it with plus (+) sign. If sum does exist, script compares it with newly generated value. If both match, there is nothing to do, if they do not match, that is logged with X character.

Example output would be:

  /public_html/download/qtext301.exe
+ /public_html/download/qtext310.exe
X /public_html/download/seobiseu110.exe
- /public_html/download/temp.zip

Here we can see that sum for qtext301.exe was valid and no action was taken. Sum for qtext310.exe was added and one for seobiseu110.exe was fixed (it's value didn't match). File temp.zip.sha1 was removed since temp.zip does not exist anymore.

P.S. While this code is not perfect and it might not be best solution, it does work for me. :)

Leave a Reply

Your email address will not be published. Required fields are marked *