#!/bin/bash
function filter_in()
{
res=0
if [[ -z "${1}" || "${1}" == "*" ]];then
echo "1"
return
fi
for n in ${1}
do
if [[ "${2}" = *"${n}" ]];then #单"[]"不能使用通配符
res=1
break
fi
done
echo "${res}"
}
function filter_out()
{
res=0
if [[ -z "${1}" ]];then
echo "0"
exit
fi
for n in ${1}
do
if [[ "${2}" = *"${n}" ]];then #单"[]"不能使用通配符
res=1
break
fi
done
echo "${res}"
}
function process_dir()
{
echo "dir:${1}"
}
function process_file()
{
if [[ $(filter_in "${2}" "${1}/${file}") != 1 || $(filter_out "${3}" "${1}/${file}") == 1 ]];then
return
fi
file_new=${1}
file_old="${DIR_OLD}"/"${file_new:((DIR_NEW_LEN+1))}"
if [ -e ${file_old} ];then
diff ${file_new} ${file_old} > /dev/null
if [ $? != 0 ];then
let DIFF_FILE_CNT++
if [ -n "${DIR_DIFF_NEW}" ];then
out_dir=${DIR_DIFF_NEW}/${file_new:((DIR_NEW_LEN+1))}
out_dir=${out_dir%/*} #使用通配符截断字符串
if [ ! -e "${out_dir}" ];then
echo "mkdir -p ${out_dir}"
fi
echo "cp -rf ${file_new} ${DIR_DIFF_NEW}/${file_new:((DIR_NEW_LEN+1))}"
else
echo "diff(${DIFF_FILE_CNT}):${file_new} ${file_old}"
fi
fi
fi
}
function traverse_directory()
{
f=$(ls ${1})
for file in ${f}
do
if [ -d "${1}/${file}" ];then
#process_dir "${1}/${file}"
traverse_directory "${1}/${file}"
else
let TOTAL_FILE_CNT++
process_file "${1}/${file}" "${INS[*]}" "${OUTS[*]}" #数组作为一个函数参数传递时,必须使用双引号""
fi
done
}
if [ $# -eq 4 ];then
DIR_NEW=${1}
DIR_OLD=${2}
DIR_DIFF_NEW=${3}
DIR_DIFF_OLD=${4}
elif [ $# -eq 3 ];then
DIR_NEW=${1}
DIR_OLD=${2}
DIR_DIFF_NEW=${3}
elif [ $# -eq 2 ];then
DIR_NEW=${1}
DIR_OLD=${2}
else
echo "param error"
exit
fi
#数组的定义,这里只是为了使用数组,才这样定义的,也可以定义成".c .h .cpp .hpp .mk .sh .mak .ini" 传递参数时不用"${INS[*]" 使用"${INS}"
#INS=(.c .h .cpp .hpp .mk .sh .mak .ini)
#INS=(".c" ".h")
#INS=(.c .h)
#OUTS=(".out" ".abs" ".bin")
#OUTS=(.c)
DIR_NEW_LEN=${#DIR_NEW}
DIR_OLD_LEN=${#DIR_OLD}
TOTAL_FILE_CNT=0
DIFF_FILE_CNT=0
START_TIME=$(date +%s)
traverse_directory "${DIR_NEW}"
END_TIME=$(date +%s)
ELSPSE_TIME=$(( END_TIME-START_TIME))
echo "ELSPSE_TIME:${ELSPSE_TIME}s,TOTAL_FILE_CNT:${TOTAL_FILE_CNT},DIFF_FILE_CNT:${DIFF_FILE_CNT}"
比较2个目录找出不同的文件
最新推荐文章于 2024-07-02 19:04:39 发布