批量文件比较shell脚本

批量文件比较shell脚本

#!/bin/bash

Target_PATH_1=$(realpath ${1})
Target_PATH_2=$(realpath ${2})

Target_PATH_1=$([[ "${Target_PATH_1}" = /* ]] && echo "$(realpath ${Target_PATH_1})" || echo "$(realpath ${PWD}/${Target_PATH_1})")
Target_PATH_2=$([[ "${Target_PATH_2}" = /* ]] && echo "$(realpath ${Target_PATH_2})" || echo "$(realpath ${PWD}/${Target_PATH_2})")

SameFilesArray=()
DiffenentFilesArray=()

echo ${Target_PATH_1}
echo ${Target_PATH_2}

CurrentPath=$(realpath ${PWD})

FileArray_1=$(cd ${Target_PATH_1} && find .)
FileArray_2=$(cd ${Target_PATH_2} && find .)

#echo ${FileArray_1}
#echo ${FileArray_2}


for FileName in ${FileArray_1[@]}
do
    if [ -e "${Target_PATH_2}/${FileName}" ]; then
        if [ -d "${Target_PATH_1}/${FileName}" ] && [ -d "${Target_PATH_2}/${FileName}" ]; then
            echo "文件${Target_PATH_1}/${FileName}与文件${Target_PATH_2}/${FileName}为目录"
        elif [ -f "${Target_PATH_1}/${FileName}" ] && [ -f "${Target_PATH_2}/${FileName}" ]; then
            diff -q ${Target_PATH_1}/${FileName} ${Target_PATH_2}/${FileName}
            value=$?
            if [[ ${value} == 0 ]]; then
                #echo "文件${Target_PATH_1}/${FileName}与文件${Target_PATH_2}/${FileName}一致: ${value}"
                SameFilesArray[${#SameFilesArray[@]}]="${Target_PATH_1}/${FileName} ${Target_PATH_2}/${FileName}"
            else
                #echo "文件${Target_PATH_1}/${FileName}与文件${Target_PATH_2}/${FileName}不一致: ${#DiffenentFilesArray[@]}"
                DiffenentFilesArray[${#DiffenentFilesArray[@]}]="${Target_PATH_1}/${FileName} ${Target_PATH_2}/${FileName}"
            fi
        else
            echo "文件${Target_PATH_1}/${FileName}与文件${Target_PATH_2}/${FileName}类别不一致"
        fi
    else
        echo "${FileName}只在${Target_PATH_1}中存在"
    fi
done

for FileName in ${FileArray_2[@]}
do
    if [ ! -e "${Target_PATH_1}/${FileName}" ]; then
        echo "${FileName}只在${Target_PATH_1}中存在"
    fi
done


echo "一致的文件:"
echo "*****************************************************************************************"
for((i=0;i<${#SameFilesArray[@]};++i))
do
    echo "${SameFilesArray[${i}]}"
done
echo "*****************************************************************************************"

echo "不一致的文件:"
echo "*****************************************************************************************"
for((i=0;i<${#DiffenentFilesArray[@]};++i))
do
    echo "${DiffenentFilesArray[${i}]}"
done
echo "*****************************************************************************************"
posted @ 2024-04-08 21:52  Linux袁浩  阅读(101)  评论(0)    收藏  举报