須要從服務器中的全部附件(2013-2019) 共60G查找相關字段linux
在linux上面直接打開doc等是亂碼的shell
先所有附件轉碼爲txt, 而後用grep遍歷查找字段實現bash
#!/bin/bash #************************************************************************* # > File Name: doc.sh # > Author: chenglee # > Main : chengkenlee@sina.com # > Blog : http://www.cnblogs.com/chenglee/ # > Created Time : 2019年04月10日 星期三 15時16分41秒 #************************************************************************* Year="2018" format="txt" savedir=$(cd `dirname $0`; pwd) filetxt="filetxt" ls -l ${Year}/ |awk '/^d/ {print $NF}' > ${Year}.logs function Find(){ for element in `ls $1` do dir_or_file=$1"/"$element if [ -d $dir_or_file ] then Find $dir_or_file else echo $dir_or_file fi done } function Filter(){ cat filelogs | grep doc | grep -v 'pdf\|zip\|rar\|pptv' > filedir } function Unoconv(){ exec 2<"filedir" while read line2<&2 do unoconv -f ${format} ${line2} echo "[${line2}] 已轉碼..." #mv *.txt ${filetxt}/${Year} done } function Move(){ exec 4<"${Year}.logs" while read line4<&4 do mv ${Year}/${line4}/*.txt ${savedir}/${filetxt}/${Year}/ done } function Filetxt(){ if [ -d "${filetxt}/${Year}" ];then root_dir="${Year}" Find $root_dir > filelogs Filter sum=`cat filedir | wc -l` echo "總數爲:${sum}" Unoconv else mkdir -p ${filetxt}/${Year} root_dir="${Year}" Find $root_dir > filelogs Filter sum=`cat filedir | wc -l` echo "總數爲:${sum}" Unoconv fi } function main(){ Filetxt echo "所有文件已實現轉碼爲txt類型" Move echo "已轉碼的文件已轉移到${savedir}/${filetxt}/${Year}/下" } main
注:先遍歷附件中列出日期扔進filelogs這個文件和新建相對文件夾, 而後把全部能轉碼的doc和docx文件所有扔進filedir文件, 而後腳本直接識別這個文件中的目錄文件, 轉碼方式是libreoffice+unoconv, 所有轉碼完成會自動把已轉好的txt文件轉移到filetxt這個文件夾中.服務器
注:我這是雙開工具
yum install libreoffice unoconv -y
注:也能夠本身下載包安裝, 我偷個懶是直接yum拉取的spa
#!/bin/bash #************************************************************************* # > File Name: crawler.sh # > Author: chenglee # > Main : chengkenlee@sina.com # > Blog : http://www.cnblogs.com/chenglee/ # > Created Time : 2019年04月10日 星期三 10時52分31秒 #************************************************************************* filetxt="TXT" function If(){ exec 6<"NameFile" while read line6<&6 do grep -rn "${line6}" ${filetxt}/ > logs/result-${line6}.logs echo "檢索${line6}完畢..." done } function main(){ If } main
注:所有轉好以後,新建一個文件, 名稱爲NameFile, 裏面換行寫入須要查找的字段, 而後腳本會自動去讀每行字符做爲變量, 而後把全部結果扔進logs這個文件夾.orm
#************************************************************************* # > File Name: unockill.sh # > Author: chenglee # > Main : chengkenlee@sina.com # > Blog : http://www.cnblogs.com/chenglee/ # > Created Time : 2019年04月10日 星期三 22時20分45秒 #************************************************************************* #!/bin/bash function killAll(){ echo "等待10秒開始判斷" sleep 10; StringName=`ps aux | grep unoconv | grep -v grep | awk -F '/' '{print$NF}' | awk -F '.' '{print$1}'` if [ "$stringname" != "$StringName" ];then echo "[轉碼正常]" else echo "[卡住了]... 準備幹掉當前進程" ps aux | grep unoconv | grep -v grep | awk -F ' ' '{print$2}' | xargs kill -9 fi } function main(){ while [ "1" = "1" ] do stringname=`ps aux | grep unoconv | grep -v grep | awk -F '/' '{print$NF}' | awk -F '.' '{print$1}'` killAll done } main
注:這個是配合轉碼shell一塊兒使用的, 每10秒檢測一下進程(時間能夠根據本身調, 一個通常5秒以內能轉好), 若是卡住了, 幹掉當前的進行下一個.blog