如何在站点静态文件下查找某关键字并修改文件名?

分类:Python,Shell,工作记,问题集 | 作者:凹凸曼 | 发表于2014/11/18 1条评论

前段时间,因关于某些政治性的内容,公司部分站点需要做处理,而且数据库只保存近几年的,无法通过数据库删除或修改早些年的静态页面数据

站点文件个数,不会少于几百万,我想大家不会一个个手工查找吧!也许真的有人那样搞呢,我只能“呵呵”了

用程序思想去解决工作中遇到的问题,很有必要!

站点环境: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

日志信息 »

该日志于2014-11-18 15:25由 凹凸曼 发表在Python, Shell, 工作记, 问题集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (1)层:
  1. xiong说道:

    看memcached找到的 再次

发表评论 »

« »