#!/bin/bash
#-----------------------
# 修改时间 2023.01.30-1230
# 优化脚本执行 更快 更准确
# 添加手动可能需要修改的文件，因为某些文本文件在字符编码上的问题在查找时会显示二进制文件
#-----------------------
#替换的文件夹目录 会自动查询子目录
MY_Desktop=`/opt/i8520/MY-Desktop`
name_dir="$1"
#替换前
B="$2"
#替换后
A="$3"
abcdfe="========================================="
finddir="/tmp/i8520-98w7e9wqe_find-0806"
rm -rf $finddir
mkdir -p $finddir
/opt/i8520/CCCX $finddir
/opt/i8520/CCCX 777 $finddir
#-----------------------
# 获得需要替换的列表文件
#-----------------------
#获得当前目录以及子目录的文件数量
find_p=`find $name_dir -type f -name "*" | awk '{print "\""$0}' | awk '{print $0"\""}' | wc -l`
#查找到要替换的文件，如果有就输出带路径在哪一行并且保存到$finddir/1.txt，所以可能会出现多行一样的情.
grep -rEn "${B}" "${name_dir}" | grep -v "Binary file" > $finddir/1.txt
#去除 ：以及相邻空格后的字符以及再次过滤掉空格后面的字符 
cat $finddir/1.txt | sed 's@:[^ ]*@@g' | sed "s/ .*$//" > $finddir/2.txt
#去除重复的行
sort -k2n $finddir/2.txt | awk '{if ($0!=line) print;line=$0}' > $finddir/finddirA.txt
#把预设转换代码加到 文件路径前面 并保存 到 finddirA.sh 脚本 。简单说finddirA.txt转换成具体功能脚本finddirA.sh
awk '{print "sed -i -r \"s|$A|$B|g\" "$0}'  $finddir/finddirA.txt >$finddir/finddirA.sh
chmod -R 750 $finddir/finddirA.sh
#替换字符得到完美的执行脚本 这里不要改
sed -i "s|\$A|$B|g" $finddir/finddirA.sh
sleep 0.5
sed -i "s|\$B|$A|g" $finddir/finddirA.sh
sleep 0.5
#-----------------------
# 是否执行替换脚本
#-----------------------
BUG_ABC_1="0"
# $BUG_ABC_2 等于0 不执行 finddirA.sh 应为是空文件
BUG_ABC_2=$(cat $finddir/finddirA.txt | wc -l)
if [[ ! x${BUG_ABC_1} = x${BUG_ABC_2} ]];then
   echo -e "${abcdfe}\n执行脚本已创建......"
   rm -rf ${MY_Desktop}/finddirA.sh
   #  if [[ ! -f ${MY_Desktop}/finddirA.sh ]];then
   #    echo "..."
   #  else
   #    mv ${MY_Desktop}/finddirA.sh ${MY_Desktop}/finddirA-`date +%Y-%m-%d-%H-%M-%S`.sh
   #  fi
   #bash $finddir/finddirA.sh
   mv $finddir/finddirA.sh ${MY_Desktop}/finddirA.sh
   /opt/i8520/CCCX ${MY_Desktop}/finddirA.sh
   echo -e "一共查询 ${find_p} 个文件。匹配到 ${BUG_ABC_2} 个文件\n${abcdfe}" 
   echo "修改文件的脚本保存在桌面 finddirA.sh"
else
   echo -e "${abcdfe}\n替换失败！一共查询 ${find_p} 个文件 替换前${B}不存在\n${abcdfe}"
   #echo "ERR"
fi
#-----------------------
# 需要手工检查的文件
#-----------------------
Journal=`sed -n '/匹配到二进制文件/p' $finddir/1.txt|wc -l`
MY_DB_NAME="0"
if [ ! x${MY_DB_NAME} = x${Journal} ];then
   echo "需要手工检查的文件,请在桌面查看，检测到二进制文件.txt"
   sed -n '/匹配到二进制文件/p' $finddir/1.txt > ${MY_Desktop}/检测到二进制文件.txt    
else
  #echo "ERR"
   echo ""
fi

exit 0
