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) ...
随机推荐
- mysql 编码问题
有时候insert数据的时候,会报以下异常: ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x83\xE9\x99\x90...' for ...
- SQL开发——SQL语法
文档资料参考: 参考:http://www.w3school.com.cn/sql/sql_syntax.asp 参考:http://wiki.jikexueyuan.com/project/sql/ ...
- LAYUI select 下拉框得高度
页面下得select 框 在css页面加样式 .layui-form-select dl { max-height: 152px;}
- python实现ip地址查询经纬度定位
1.此api已经关闭 https://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&ak=你申请的AK&extension ...
- 004-数据结构之ADT-栈与队列【数组方式实现】
一.ADT 在介绍抽象数据类型的时候,先看看什么是数据类型,在Java中可能首先会想到像 int,double这样的词,这是Java中的基本数据类型,一个数据类型会涉及到两件事: ①.拥有特定特征的数 ...
- 图解:window与BOM的关系
window与BOM的关系: 1.https://www.jianshu.com/p/f5409202a835
- JS中使用base64编码上传下载文件
下载文件:使用FileSaver.js https://github.com/eligrey/FileSaver.js/blob/master/README.md 手机端UC浏览器无法下载 安卓 ...
- python基础之 序列化,os,sys,random,hashlib
1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...
- spring batch (二) 元数据表
内容来自<Spring Batch 批处理框架>,作者:刘相. 一.spring batch 框架进行元数据管理共有六张表,三张SEQUENCE用来分配主键的,九张表分别是: BATCH_ ...
- 两种库解析、构造 JSON
1.用CJSON库 1.1解析Json 需要解析的JSON文件: { "name":"Tsybius", , "sex_is_male":t ...