抱歉,评论被关闭
如何在站点静态文件下查找某关键字并修改文件名?
前段时间,因关于某些政治性的内容,公司部分站点需要做处理,而且数据库只保存近几年的,无法通过数据库删除或修改早些年的静态页面数据
站点文件个数,不会少于几百万,我想大家不会一个个手工查找吧!也许真的有人那样搞呢,我只能“呵呵”了
用程序思想去解决工作中遇到的问题,很有必要!
站点环境:linux
可以使用的shell脚本处理,因为他们是天生在一起的,而且处理上很方便,不过一开始有一个问题木有考虑到,后面再讲
上代码,shell代码如下:
#!/bin/sh # author: 凹凸曼 # email: jar-c@163.com d=$1 delname=$2 #delname1=$3 if [ -z $d ] then echo "站点不存在" exit 0 fi if [ -z $delname ] then echo "关键字不存在" exit fi log=./search.log find ${d} -type f -iname "*.htm" -o -type f -iname "*.html" -o -type f -iname "*.shtml" -o -type f -iname "*.shtm"|xargs grep "$delname" >> ${log} #| cut -d\: -f1 | awk '{system("mv "$1" "$1"xxx" )}' sleep 1 while read line do d=`echo $line | cut -d\: -f1` mv "$d" "$d"xxx | echo "$d 修改为 $d"x >>result.log sleep 1 done < ${log} mv ${log} ${log}`date +%Y%m%d%H%s`
本地测试了,木问题,上服务器测试,找不到相应的关键字的页面
问题:页面是乱码,原因:系统编码造成的,不想改变正在运行中的环境编码
就用python重新写了一个脚本程序进行处理如下:
# -*- coding:utf-8 -*- # author: 凹凸曼 # email : jar-c@163.com import os import os.path import re #版本要求:2.6至3.0以下 class ReFile(): #目录 __rdir="./" __type=['.htm','.html','.shtml','.shtm'] #文件名后缀增加 sss __dsuffix='sss' #处理的关键字 __dealstr='' __log="./re.log" def __init__(self,dir,dealstr): self.__rdir=dir self.__dealstr=dealstr def getFiles(self): for parent,dirnames,filenames in os.walk(self.__rdir): for filename in filenames: dirfilename=parent+'/'+filename if os.path.splitext(filename)[1] in self.__type: try: data=open(dirfilename,'r').read().decode("gbk").encode("utf-8") except Exception,e: data=open(dirfilename,'r').read() mm=re.search(self.__dealstr,data) if mm: self.saveLog(dirfilename) os.rename(dirfilename,dirfilename+self.__dsuffix) else: continue else: continue def saveLog(self,c): file=open(self.__log,'a') file.write(str(c)+'\n') if __name__=='__main__': #ReFile #@param1: 站点路径 如:/data/site #@param2: 关键字 如:凹凸曼博客|apoyl refile=ReFile("/data/site","凹凸曼博客|apoyl") refile.getFiles()
总结:系统运维中,常常需要把处理问题的思路实现成具体程序,去处理一些繁琐的问题
本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=1851
目前盖楼
看memcached找到的 再次