bash练习13(计算一个文件或文件夹下文件的md5值并放入指定的目录中)

#!/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值:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值