shell遍历比较文件夹下文件md5值

发布时间 2023-09-28 10:19:08作者: WEIWEI1095
#!/bin/bash
CURRENT_DIR=$(cd $(dirname $0); pwd)
SOURCE_DIR="$CURRENT_DIR/python_data"
TARGET_DIR="$CURRENT_DIR/out_bin"

cd $SOURCE_DIR
> python.md5
for file in $(ls $SOURCE_DIR | grep "data")
do
    source_file=${SOURCE_DIR}/${file}
    echo -e "${file}\t" | awk '{printf $0}' >> python.md5
    md5sum ${source_file} | awk '{print $1}' >> python.md5
   # echo -e '\n'>> python.md5
done
sort -k 1 python.md5

cd $TARGET_DIR
> out.md5
for file in $(ls $TARGET_DIR | grep "_out.bin")
do
    target_file=${TARGET_DIR}/${file}
    echo -e "${file}\t" | awk '{printf $0}' >> out.md5
    md5sum ${target_file} | awk '{print $1}' >> out.md5
   # echo -e '\n' >> out.md5
done
sort -k 1 out.md5

Fname_python_data=$SOURCE_DIR/python.md5
Fname_out_bin=$TARGET_DIR/out.md5

Lines1=`cat $Fname_python_data | wc -l`
Lines2=`cat $Fname_out_bin | wc -l`
echo -e "-----------start-------------\n"
for((N1=$Lines1-1,Num1=$Lines1;N1>=1;N1--,Num1--))
do
    Var1_1=`sed -n "${Num1}p" $Fname_python_data`
    Var1_2=`echo $Var1_1 | awk '{print $1}'`
    Var1_3=`echo $Var1_1 | awk '{print $2}'`
#    echo -e "Now solve the row:$N1, the content:$Var1_1, the first:$Var1_2", the second:$Var1_3
    echo -e "Now Compare $Fname_python_data 's row:$N1,   Name : $Var1_2,  Md5 : $Var1_3"
    echo -e "\n"
#    bin_id1=`echo $Var1_1 |awk '{print substr($1,1,3)}'`
    bin_id1=$(cut -c-5 <<< "$Var1_2")
    bin_md5=$(cut -c-5 <<< "$Var1_3")
    for((N2=$Lines2-1,Num2=$Lines2;N2>=1;N2--,Num2--))
    do
        Var2_1=`sed -n "${Num2}p" $Fname_out_bin`
        Var2_2=`echo $Var2_1 | awk '{print $1}'`
        Var2_3=`echo $Var2_1 | awk '{print $2}'`
#        echo -e "Now solve the row:$N2, the content:$Var2_1, the first:$Var2_2", the second:$Var2_3
#        echo -e "Now solve $Fname_out_bin 's row:$N2,  Name : $Var2_2,   Md5 :$Var2_3"
#        data_id2=`echo $Var2_1 |awk '{print substr($1,1,3)}'`
        data_id2=$(cut -c-5 <<< "$Var2_2")
        data_md5=$(cut -c-5 <<< "$Var2_3")
        if  [ "$bin_md5" == "$data_md5" ] && [ "$bin_id1" == "$data_id2" ];then
#        if [ "$Var1_3" == "$Var2_3" ];then
            echo -e "\033[32m-------------------------------------------\033[0m"
            echo -e "\033[32m---------Equal,$Var1_2=$Var2_2-------------\033[0m"
            echo -e "\033[32m-------------------------------------------\033[0m"
            N2=0
        fi
    done
    echo -e '\n'
done