这个本来使用Pytorch是最好的
作者:腾讯元宝、酷谷的谷子
Replacement.sh脚本在后面责怪脚本的用来替换字符串的,会吧关键自的绝对路保存到finddirA.txt
#!/bin/bash
#--------------------
# 2025-01-03 第二版
# 作者:腾讯元宝、酷谷的谷子
#--------------------
rm -rf ${HOME}/index-file/x.txt
mkdir -p ${HOME}/index-file/tmp
my_run_a(){
#验证是否循环
echo "111" >> ${HOME}/index-file/x.txt
IndexFileDir="${HOME}/index-file"
MYurl_W004_004="http://tjgpc.zwfwb.tj.gov.cn/webInfo/getWebInfoListForwebInfoClass.do?fkWebInfoclassId=W004_004"
#sleep 2
cd ${IndexFileDir}
#删除下载页面
rm -rf ${IndexFileDir}/*.html
#下载页面--更正公告
curl -o W004_004.html ${MYurl_W004_004}
#--------------------
# 判断系统时间和页面时间,是否存在,如果不存在就退出
#--------------------
MY_Time="0"
#SystemTime="2024-12-18"
SystemTime=`date +%Y-%m-%d`
IndexFileTime=`cat ${IndexFileDir}/W004_004.html|grep "${SystemTime}"|wc -l`
if [[ ! X${MY_Time} = X${IndexFileTime} ]];then
echo "OK"
else
echo "err"
#exit 0
fi
#--------------------
# 找出更正公告页面的-第一页的链接,应为只要最新的,这样就简单了
#--------------------
rm -rf ${IndexFileDir}/NewUrl.txt
#匹配网址特征字符串5A19D9A2-C12B-479A-A2C7-E3FACD9528B6
awk '{if ($0 ~ /[0-9a-zA-Z]{8}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{4}-[0-9a-zA-Z]{12}/) print $0}' \
${IndexFileDir}/W004_004.html|grep -oP "\"\K[^\"]+(?=\")"|grep 'http' >> ${IndexFileDir}/NewUrl.txt
#--------------------
# 下载 NewUrl.txt 中的链接
#--------------------
UrlDownload(){
rm -rf ${IndexFileDir}/NewUrl
mkdir -p ${IndexFileDir}/NewUrl
cd ${IndexFileDir}/NewUrl
while IFS= read -r url; do
echo "正在下载 $url ..."
curl -s --remote-name "$url"
if [ $? -eq 0 ]; then
echo "下载成功。"
sleep 0.5
else
echo "下载失败: $url"
fi
done < ${IndexFileDir}/NewUrl.txt
}
#--------------------
# 在 NewUrl 目录查包行当前系统日期的文件并重命名,复制到当天日期目录
#--------------------
CopyFiles(){
mkdir -p ${IndexFileDir}/${SystemTime}
${IndexFileDir}/Replacement.sh ${IndexFileDir}/NewUrl ${SystemTime} ${SystemTime} > /dev/null 2>&1
while IFS= read -r listDir; do
#读取标题
xxxXX_A(){
cat ${listDir}|grep 'ArticleTitle'|grep -oP "\"\K[^\"]+(?=\")"|sed -n 3p
}
#读取发布日期
xxxXX_B(){
cat ${listDir}|grep 'PubDate'|grep -oP "\"\K[^\"]+(?=\")"|sed -n 3p|sed 's/ //g'
}
#mv ${listDir} "${IndexFileDir}/${SystemTime}/`xxxXX_B`-`xxxXX_A`.html"
#提取文字
xxxXX_C(){
xmllint --html --xpath "string(//div[@class='main-cont'])" ${listDir} 2>/dev/null|grep -v '\^' |\
grep -i -v -e '#noticeArea' -e 'text-decoration' \
-e '相关附件' -e '公告差异化样式' -e '^\s*$' -e '123.html:' \
-e 'outline-offset' -e 'outline' -e '征集文件' |awk '{gsub(/ /,"");print}' \
>> "${IndexFileDir}/${SystemTime}/`xxxXX_B`-`xxxXX_A`.TXT"
}
xxxXX_C
sleep 0.5
done < /tmp/i8520-98w7e9wqe_find-0806/finddirA.txt
#2024-12-3105:05:06
#awk '{if ($0 ~ /[0-9]{4}-[0-9]{2}-[0-9]{4}:[0-9]{2}:[0-9]{2}/) print $0}'
echo "OK"
}
#--------------------
# 第一次处理
#--------------------
if [[ -f "${IndexFileDir}/tmp/url_list_${SystemTime}.txt" ]] ; then
echo "url_list_${SystemTime}.txt OK"
else
#echo "文件不存在"
UrlDownload
CopyFiles
cat "${IndexFileDir}/NewUrl.txt" > ${IndexFileDir}/tmp/url_list_${SystemTime}.txt
fi
#--------------------
# 最后数据处理
#--------------------
LOCAL_FILE="${IndexFileDir}/tmp/url_list.txt"
TEMP_FILE="${IndexFileDir}/NewUrl.txt"
DIFF_OUTPUT="${IndexFileDir}/diff_output.log"
# 对比两个文件,找出不同的行
echo "[$LOCAL_FILE] 正在对比文件差异..."
diff -u "$LOCAL_FILE" "$TEMP_FILE" | grep '^+' | grep -v '^+++' > "$DIFF_OUTPUT.new"
# 检查是否有差异
if [[ -s "$DIFF_OUTPUT.new" ]]; then
echo "[$CURRENT_TIME] 发现以下不同的行:"
cat "$DIFF_OUTPUT.new"
sed -i 's/^+//' "$DIFF_OUTPUT.new"
UrlDownload_A(){
rm -rf ${IndexFileDir}/NewUrl
mkdir -p ${IndexFileDir}/NewUrl
cd ${IndexFileDir}/NewUrl
while IFS= read -r url; do
echo "正在下载 $url ..."
curl -s --remote-name "$url"
if [ $? -eq 0 ]; then
echo "下载成功。"
sleep 0.5
else
echo "下载失败: $url"
fi
done < "$DIFF_OUTPUT.new"
}
UrlDownload_A
# 在 NewUrl 目录查包行当前系统日期的文件并重命名,复制到当天日期目录
CopyFiles
# 更新文件url_list.txt
cat "${IndexFileDir}/NewUrl.txt" > ${IndexFileDir}/tmp/url_list_${SystemTime}.txt
else
echo "err"
fi
# 清理临时文件
rm "$DIFF_OUTPUT.new"
echo -e "\n----------------\n所有数据已经处理完毕\n数据保存在${IndexFileDir}/${SystemTime}\n........"
}
my_run_a
while true ; do
sleep 450s
my_run_a
done
Replacement.sh
#!/bin/bash
#-----------------------
# 修改时间 2022.12.10-0955
# 优化脚本执行 更快 更准确
#-----------------------
#替换的文件夹目录 会自动查询子目录
rm -rf /finddirA.sh
name_dir="$1"
#替换前
B="$2"
#替换后
A="$3"
abcdfe="========================================="
finddir="/tmp/i8520-98w7e9wqe_find-0806"
rm -rf $finddir
mkdir -p $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\n执行脚本已创建,正在执行替换脚本......\n"
#执行替换脚本
mv $finddir/finddirA.sh /
echo -e "替换成功!一共查询 ${find_p} 个文件。匹配到 ${BUG_ABC_2} 个文件\n\n${abcdfe}"
else
echo -e "${abcdfe}\n\n替换失败!一共查询 ${find_p} 个文件 替换前${B}不存在\n\n${abcdfe}";exit
fi
评论区