安装Libreoffice
# yum install -y libreoffice
建立Bash
#mkdir ./convert
#touch ./convert.sh
#chmod +x ./convert.sh
#vi./convert.sh
#!/bin/bash
#建立相关文件夹
#mkdir $jobdir $jobdir/log $jobdir/tmp && clear
#设置系统变量
floder=$(date '+%Y-%m')
time=$(date '+%Y%m%d%H%M')
location=(/www/wwwroot/dir/upload)
rundir=(/www/wwwroot/dir/tools/convert/tmp)
tools=(/www/wwwroot/dir/tools)
jobdir=(/www/wwwroot/dir/tools/convert)
logdir=(/www/wwwroot/dir/tools/convert/log)
#pdffile=$(find $location/$floder -name '*.pdf' -exec basename {} \; > $rundir/pdf.list )
up=($location/$floder)
soffice=(/opt/libreoffice6.3/program/soffice)
#find搜索变量,用于搜索-mmin - * 分钟内的*.type 类型文件 写入 $rundir/下的list文件内
doc=$(find $location/$floder -name '*.doc' -mmin -15 -exec basename {} \; >$rundir/doc.list )
docx=$(find $location/$floder -name '*.docx' -mmin -15 -exec basename {} \; >$rundir/docx.list )
xls=$(find $location/$floder -name '*.xls' -mmin -15 -exec basename {} \; >$rundir/xls.list )
xlsx=$(find $location/$floder -name '*.xlsx' -mmin -15 -exec basename {} \; >$rundir/xlsx.list )
ppt=$(find $location/$floder -name '*.ppt' -mmin -15 -exec basename {} \; >$rundir/ppt.list )
pptx=$(find $location/$floder -name '*.pptx' -mmin -15 -exec basename {} \; >$rundir/pptx.list )
#list变量,catlist文件去掉find生成的list文件内的换行符,文件名单行排列
doclist=$(cat $rundir/doc.list |tr '\n' ' ')
docxlist=$(cat $rundir/docx.list |tr '\n' ' ')
xlslist=$(cat $rundir/xls.list |tr '\n' ' ')
xlsxlist=$(cat $rundir/xlsx.list |tr '\n' ' ')
pptlist=$(cat $rundir/ppt.list |tr '\n' ' ')
pptxlist=$(cat $rundir/pptx.list |tr '\n' ' ')
#将soffice执行语句写入/type.sh,并利用chmod +x赋予执行权限(把这行语句设置为变量不能使用???)
echo "soffice --headless --invisible --convert-to pdf:writer_pdf_Export $location/$floder/$doclist "> $rundir/doc.sh && chmod +x $rundir/doc.sh
echo "soffice --headless --invisible --convert-to pdf:writer_pdf_Export $location/$floder/$docxlist "> $rundir/docx.sh && chmod +x $rundir/docx.sh
echo "soffice --headless --invisible --convert-to pdf:writer_pdf_Export $location/$floder/$xlslist "> $rundir/xls.sh && chmod +x $rundir/xls.sh
echo "soffice --headless --invisible --convert-to pdf:writer_pdf_Export $location/$floder/$xlsxlist "> $rundir/xlsx.sh && chmod +x $rundir/xlsx.sh
echo "soffice --headless --invisible --convert-to pdf:writer_pdf_Export $location/$floder/$pptlist "> $rundir/ppt.sh && chmod +x $rundir/ppt.sh
echo "soffice --headless --invisible --convert-to pdf:writer_pdf_Export $location/$floder/$pptxlist "> $rundir/pptx.sh && chmod +x $rundir/pptx.sh
#sed修改完善type.sh文件内容,如不执行,则生成的文件为 执行语句 $location/file1 file2 file3,实测证明soffice无法执行此命令,会导致error,所以需要每行添加一次执行
sed -i "s/.docx /.docx\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.doc /.doc\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.xlsx /.xlsx\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.xls /.xls\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.pptx /.pptx\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt /.ppt\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
#由于doc和docx存在重复,所以再修改一次sh文件
#doc+docx
sed -i "s/.docx/.docx --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.doc/.doc --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.doc --outdir \/www\/wwwroot\/dir\/upload\/$floder x/.docx /g" `grep -rl "\n" $rundir/`
#ppt+pptx
sed -i "s/.pptx/.pptx --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt/.ppt --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt --outdir \/www\/wwwroot\/dir\/upload\/$floder x/.pptx /g" `grep -rl "\n" $rundir/`
#xls+xlsx
sed -i "s/.xlsx/.xlsx --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.xls/.xls --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.xls --outdir \/www\/wwwroot\/dir\/upload\/$floder x/.xlsx /g" `grep -rl "\n" $rundir/`
#清除没有文件名的soffice执行命令替换为换行/实测换行不会导致报错
sed -i "s/soffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\/ //g" `grep -rl "\n" $rundir/`
sed -i "s/soffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\/ //g" `grep -rl "\n" $rundir/`
#sed -i "s/soffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\/ //g" `grep -rl "\n" $rundir/`
#记录需要转换的文件名
#cat $rundir/*.list >$jobdir/log/filelist-$time.log
#合并为job.sh并赋予执行权限
cat $rundir/*.sh >$jobdir/job.sh
chmod +x $jobdir/job.sh
#清除最后一个无效soffice执行命令替换为换行
#sed -i "s/soffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/ //g" `grep -rl "\n" $jobdir/job.sh`
#设置当前时间变量
#now=$(date '+%Y%m%d%H%M')
#记录转换日志:开始时间
#echo -e "\njobStart:$time" >>$jobdir/log/job.log
#记录转换详情
#$jobdir/job.sh >>$jobdir/log/job.log
#转换不记录转换详情
$jobdir/job.sh
#记录转换日志:结束
#echo "jobEND:$time" >>$jobdir/log/jobend-$time.log
#清理临时文件
rm -rf $rundir/*.list
rm -rf $rundir/*.sh
rm -rf $rundir/*.log
最后crontab这个sh每N分钟运行一次即可,下一步想试试看 有文件上传就直接转换;