#!/bin/bash
#基于zenity GUI 的脚本
#使用前请先安装 sudo apt install zenity
#指定路径下的所有文件 替换 内
# sed -n 'p;n' 显示奇数行 # sed -n 'n;p' 显示偶数行 
FGF_B='====================================================='
FGF_C=`printf %-50s`
FGF_D=`printf %-55.5s`
if [ ! -f "/bin/zenity" ];then
zenity --error --width=380  --title="错误信息" --text="$FGF_B\n||$FGF_C你没有安装  zenity$FGF_C||\n$FGF_B" || exit
else
echo "zenity OK"
fi
finddir="/tmp/i8520-98w7e9wqe_find-0806"
rm -rf $finddir
mkdir -p $finddir
MYfind()
{
myp_b=`cat -n "$0" | grep "awk '{print \"sed" | awk '{print $1}'`
myp_a=`cat -n "$0" | grep "Box_dir=\"" | awk '{print $1}'`
echo -e "\r温馨提示：在${myp_a}行改路径   在${myp_b}行改sed参数 \r开始替换......\r"
#为了得到带空格的文件路径 "" 加了双引号 保存到 finddirA.txt 文件 
#-name "*" 表示 路径下的所有文件
find $name_dir -type f -name "*" | awk '{print "\""$0}' | awk '{print $0"\""}' > $finddir/finddirA.txt

if [ ! -s "$finddir/finddirA.txt" ];then
echo -e "创建路径文件失败，请确认路径是否存在！！！" 
else
echo -e "创建路径文件成功"
fi
#把预设转换代码加到 文件路径前面 并保存 到 finddirA.sh 脚本
#这些 \"s/$A/$B/g\" "$0 不要动 #可以改参数 比如 不要 -r
awk '{print "sed -i -r \"s/$A/$B/g\" "$0}'  $finddir/finddirA.txt >$finddir/finddirA.sh
chmod -R 750 $finddir/finddirA.sh
#替换前
B="${name_text_A}"
#替换后
A="${name_text_B}"
#替换字符得到完美的执行脚本 这里不要改
sed -i "s/\$A/$B/g" $finddir/finddirA.sh
sed -i "s/\$B/$A/g" $finddir/finddirA.sh

if [ ! -s "$finddir/finddirA.sh" ];then
echo -e "创建替换脚本失败"
else
echo -e "创建替换脚本成功"
fi

md5sum $name_dir/* >>$finddir/md5sum_a.txt
mymd5sum=`sed -n 1p $finddir/md5sum_a.txt`
#执行替换脚本
bash $finddir/finddirA.sh
if [ ! $? == 0 ];then
    echo -e "\r执行替换脚本失败 ！！！替换前字符 $B 不符合 sed 规范\
    请查看 sed -h 帮助\r其他帮助：https://www.cnblogs.com/f-ck-need-u/p/7499309.html" 
else
    #验证前后MD5直判断是否替换成功 ，应为只要 sed 输入符合规范 finddirA.sh脚本都会执行
    find_p=`find $name_dir -type f -name "*" | awk '{print "\""$0}' | awk '{print $0"\""}' | wc -l`
    mymd5sum_x=`md5sum $name_dir/* | sed -n 1p`
    if [ ! ${mymd5sum:0:32} = ${mymd5sum_x:0:32}  ] ;then
    echo -e "\r执行替换脚本成功\r已成功替换${find_p}个文件" 
       else
       echo -e "\r执行替换脚本失败\r替换前字符 - 没有在文件中存在" 
    fi
fi

}


VideoTitle="批量替换多个文件字符"
#查询的路径，每个路径用 | 分开
Box_dir="/home/i8520/桌面/未命名文件夹"
name_text_a=""
name_text_b=""
while true ; do
    #选择查询路径 对话框
    name_dir=$(zenity --forms --width=520 --height="150" --title="$VideoTitle" --text="选择查询路径" \
    --add-combo="请选择" --combo-values="$Box_dir") || exit
    if [ -z $name_dir ];then
        zenity --error --width=380 --height=150 --title="选择错误" --text "$FGF_B\n||$FGF_D选择不能为空$FGF_D||\n$FGF_B"
    else
        break;         
    fi
done

while true ; do
    #输入字符 替换前 对话框
    name_text_A=$(zenity --entry --width=520 --title="$VideoTitle" \
    --text="请输入替换===前===的字符\r如果是 * = 一些运算符号  需要加星号放入 [] 里" --entry-text="$name_text_a")
    if [ -z "$name_text_A" ];then
        zenity --error --width=380 --height=150 --title="输入错误" --text "$FGF_B\n||$FGF_D输入不能为空$FGF_D||\n$FGF_B"
    else
        break;         
    fi
done

while true ; do
    #输入字符 替换后 对话框
    name_text_B=$(zenity --entry --width=520 --title="$VideoTitle" --text="请输入替换===后===的字符" --entry-text="$name_text_b")
    if [ -z "$name_text_B" ];then
        zenity --error --width=380 --height=150 --title="输入错误" --text "$FGF_B\n||$FGF_D输入不能为空$FGF_D||\n$FGF_B"
    else
        break;         
    fi
done



MYfind | zenity --text-info --title="$VideoTitle" --width=520 --height=275 || exit

