shell实现大批量word转码然后分析相关字段
需求
需要从服务器中的所有附件(2013-2019) 共60G查找相关字段
在linux上面直接打开doc等是乱码的
思路
先全部附件转码为txt, 然后用grep遍历查找字段实现
转码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拉取的
检索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这个文件夹.
维护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秒之内能转好), 如果卡住了, 干掉当前的进行下一个.
shell实现大批量word转码然后分析相关字段的更多相关文章
- Shell主要逻辑源码级分析 (2)——SHELL作业控制
版权声明:本文由李航原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/110 来源:腾云阁 https://www.qclou ...
- TaskTracker任务初始化及启动task源码级分析
在监听器初始化Job.JobTracker相应TaskTracker心跳.调度器分配task源码级分析中我们分析的Tasktracker发送心跳的机制,这一节我们分析TaskTracker接受JobT ...
- MTK Android 源码目录分析
Android 源码目录分析 Android 4.0 |-- abi (application binary interface:应用二进制接口)|-- art (average retrieval ...
- MapReduce的ReduceTask任务的运行源码级分析
MapReduce的MapTask任务的运行源码级分析 这篇文章好不容易恢复了...谢天谢地...这篇文章讲了MapTask的执行流程.咱们这一节讲解ReduceTask的执行流程.ReduceTas ...
- Activity源码简要分析总结
Activity源码简要分析总结 摘自参考书籍,只列一下结论: 1. Activity的顶层View是DecorView,而我们在onCreate()方法中通过setContentView()设置的V ...
- MapReduce的MapTask任务的运行源码级分析
TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...
- 监听器初始化Job、JobTracker相应TaskTracker心跳、调度器分配task源码级分析
JobTracker和TaskTracker分别启动之后(JobTracker启动流程源码级分析,TaskTracker启动过程源码级分析),taskTracker会通过心跳与JobTracker通信 ...
- TableInputFormat分片及分片数据读取源码级分析
我们在MapReduce中TextInputFormat分片和读取分片数据源码级分析 这篇中以TextInputFormat为例讲解了InputFormat的分片过程以及RecordReader读取分 ...
- MapReduce中TextInputFormat分片和读取分片数据源码级分析
InputFormat主要用于描述输入数据的格式(我们只分析新API,即org.apache.hadoop.mapreduce.lib.input.InputFormat),提供以下两个功能: (1) ...
随机推荐
- oo第二次总结
第五次作业 度量分析 因为第五次作业是在第三次作业的基础上改的,所以出现了与第三次作业一样的问题,即圈复杂度超标和嵌套现象严重.同时,由于对多线程的不熟悉,将一些功能集中的放入了一个类里,这也是McC ...
- docker上配置mysql主从复制
1.在docker上启动2台mysql容器:(这里3306为主,3307为从) docker run -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 - ...
- [dev][go] 入门Golang都需要了解什么
一 什么是Golang 首先要了解Golang是什么. Golang是一门计算机编程语言:可以编译成机器码的像python一样支持各种特性的高级语言. 由Google发明,发明人之一是K,就是C语言的 ...
- LVS,Keepalived,HAproxy区别与联系
LVS,Keepalived,HAproxy区别与联系 LVS 全称Linux Virtual Server,也就是Linux虚拟服务器,由章文嵩(现就职于于淘宝,正因为如此才出现了后来的fullna ...
- Maven项目无法找到mybatis的xml映射文件
通常我们的xml映射文件会放在源码中,普通的java项目在编译时可以将src下的xml放到classes文件中. 但maven项目编译时是不会将xml放到classes文件中,从而导致我们的mybat ...
- [LeetCode] 97. Interleaving String_ Hard tag: Dynamic Programming
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Example 1: Input: s1 = ...
- Oracle 12C 补丁升级
升级步骤 Oracle 12.2.0.1升级至12.2.0.1.190115 1.阅读readme文件 2.检查更新opatch 3.备份程序 4.使用opatchauto工具进行数据库升级 5.打O ...
- 2018-2019-2 网络对抗技术 20165321 Exp1 PC平台逆向破解
1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序 ...
- vue中动态样式不起作用? scoped了解一下
vue中style标签使用属性scoped的注意事项 style上添加属性scoped可以实现样式私有化,但是在使用动态样式时,样式会不起作用.可以先去掉scoped
- python [[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
#1)利用推导式运行过程:for i in a ,每个i是[1,2],[3,4],[5,6],for j in i,每个j就是1,2,3,4,5,6,合并后就是结果 a=[[1,2],[3,4],[5 ...