#!/usr/bin/bash
# md5files.sh用于对文件或目录中文件求md5值,并且把文件的文件名和此文件产生的md5值存入一个指定路径下
# 用法: md5file.sh 文件或目录 指定的路径
if [ $# -ne 2 ];then
echo "Usage: $0 <file or fold> <path>"
exit 1
fi
if [ ! -e $1 ];then
echo "$1 not exists"
exit 1
fi
if [ -f $1 ];then
KIND=1
FILE=$1
elif [ -d $1 ];then
KIND=2
DIR=$1
else
echo "$1 is not a file or fold"
exit 1
fi
if [ ! -d $2 ];then
echo "$2 not exists or is not a path"
exit
fi
DESTPATH=$2
DESTPATH=${DESTPATH%/}
if [[ $DESTPATH =~ \.\. ]];then
DESTPATH=$(pwd)
DESTPATH=$(dirname $DESTPATH)
elif [[ $DESTPATH =~ \. ]];then
DESTPATH=$(pwd)
elif [[ ! $DESTPATH =~ ^\/ ]];then
DESTPARH=$(pwd)/${DESTPATH}
fi
#echo "DESTPATH:${DESTPATH}"
if [ ${KIND} -eq 2 ];then
if [[ $DIR =~ \.\. ]];then
DIRPATH=$(dirname $(pwd))
elif [[ $DIR =~ \. ]];then
DIRPATH=$(pwd)
elif [[ ! $DIR =~ ^\/ ]];then
DIRPATH=$(pwd)/${DIR}
fi
DIRPATH=$(basename ${DIRPATH})
fi
if [ ! -w ${DESTPATH} -o ! -x ${DESTPATH} ];then
echo "You cannot access the \"${DESTPATH}\" neither write in it!"
exit 1
fi
case ${KIND} in
1)
md5=$(md5sum ${FILE})
code=$(echo ${md5} | cut -d" " -f1)
echo ${code} > ${DESTPATH}/${FILE}
echo "md5code of $FILE is ${DESTPATH}/${FILE}"
;;
2)
mkdir -p ${DESTPATH}/${DIRPATH}
if [ $? -ne 0 ];then
echo "can not create fold ${DIR} in ${DESTPATH}"
exit 1
fi
for FILE in $(ls ${DIR})
do
# echo $(pwd)
if [ ! -f ${DIR}/${FILE} ];then
continue
fi
md5=$(md5sum ${DIR}/$FILE)
code=$(echo $md5 | cut -d" " -f1)
echo ${code} > ${DESTPATH}/${DIRPATH}/${FILE}
done
echo "md5 code fold: ${DESTPATH}/${DIRPATH}"
;;
*)
;;
esac
执行这个脚本前:test下目录有三个文件,md5codefile目录下是空的
执行:./md5files.sh 123.txt md5codefile 后,md5codefile目录下多了一个123.txt
执行:./md5files.sh test md5codefile后,md5codefile目录下多了一个文件夹test,其内容是三个名称与test下文件名称对应的文件,存放各自文件的md5值: