shell實現大批量word轉碼而後分析相關字段

需求

須要從服務器中的全部附件(2013-2019) 共60G查找相關字段linux

在linux上面直接打開doc等是亂碼的shell

思路

先所有附件轉碼爲txt, 而後用grep遍歷查找字段實現bash

轉碼shell

#!/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

 檢索shell

#!/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

維護shell

#*************************************************************************
#         > 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

相關文章
相關標籤/搜索