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) ...
随机推荐
- EF Core HasQueryFilter 的小坑
这是今天在实际项目中遇到的一个问题,Entity Framework Core 2.2 生成了下面的 SQL 语句,INNER JOIN 部分丑陋的 SQL 语句让人无法忍受. SELECT TOP( ...
- 聊天机器人開發好消息!!DIALOGFLOW與微信的天作之合!!
虽然DIALOGFLOW暂未能够与微信(WECHAT)或企业微信(ENTERPRISE WECHAT)进行任何技制上的连接INTERGRATION),确实限制了我们这些聊天机器人开发者的创作空间,因为 ...
- PHP 二维数组根据某个字段按指定排序方式排序
/** * 二维数组根据某个字段按指定排序方式排序 * @param $arr array 二维数组 * @param $field string 指定字段 * @param int $sort_or ...
- CDI feature
CDI Java EE的上下文和依赖注入(Contexts and Dependency Injection for Java EE,CDI),CDI是即将完成的Java EE 6平台的关键组成部分, ...
- 从github上下载一个项目的子目录
https://github.com/pbojinov/developer.chrome.com/tree/master/extensions/examples/extensions/proxy_co ...
- mysql5.7.17源码安装
创建用户和目录 groupadd mysql useradd -r -g mysql mysql mkdir -p /data/mysql/standby/data mkdir -p /data/my ...
- MongoDB - 2
Aggregation Framework: $project: a document stream by renaming, adding, or removing fields #alter Da ...
- cdh安装spark遇到的几个BUG
spark安装后启动: [zdwy@master spark]$ sbin/start-all.sh starting org.apache.spark.deploy.master.Master, l ...
- MongoDB下,启动服务时,出现“服务没有响应控制功能”解决方法
摘要:https://www.cnblogs.com/luoguixin/p/6291408.html 欢迎转载,若需转载请标明出处:https://www.cnblogs.com/luoguixin ...
- PHP 获取一篇文章内容中的全部图片,并下载
做个记录,在工作or面试中有可能会遇到function downImagesFromTargetUrl($url, $target_dir = null) { if(!filter_var($url, ...