说明:
webvpndata_tmp目录下会生成多个 1593483512_00001-441_web_3232235974_3396404947_80_443 之类的文件夹 看图1
该文件夹下面有从0开始排序的文件,看图2
最后的结果
将 1593483512_00001-441_web_3232235974_3396404947_80_443 下的文件 0,1,2,3,4 最后合并成
1593483512_00001-441_web_3232235974_3396404947_80_443.txt
结果
脚本如下
#!/bin/sh
curdir=/webvpn/
webvpnTmpDir=/webvpndata_tmp/
webvpnDataDir=/webdata/
webvpnDataCopyDir=/webdata_copy/
procname2=merge_webvpn_log.sh
if [ ! -d $webvpnTmpDir ];then
mkdir $webvpnTmpDir
fi
if [ ! -d $webvpnDataDir ];then
mkdir $webvpnDataDir
fi
## 以下命令基于输出的第一个字段的第一列(小时的第一个数字)对输出进行排序。
##find . -type f -printf "\n%AT %p" | head -n 2 | sort -k1.1r
function listFiles()
{
#1st param, the dir name
#2nd param, the aligning space
for file in `ls $webvpnTmpDir`;
##1、遍历 webvpndata_tmp 获取当前目录下的所有文件夹,一个文件夹代表一个完整话单
##2、遍历每个文件夹下的文件 ,获取最大文件的序号,并获取最新的文件时间大于当前时间1分钟 ,并统计文件序号和数量是否一致。
do
fileNewDate=`find $webvpnTmpDir$file -type f -printf "\n%As" | head -n 2 | sort -k1.1r`
current=`date "+%Y-%m-%d %H:%M:%S"`
currentTimeStamp=`date -d "$current" +%s`
cTimeStamp=`expr $currentTimeStamp - $fileNewDate `
##mTime=`expr $cTimeStamp / 60`
fileCount=`ls $webvpnTmpDir$file -l|grep "^-"| wc -l`
bigNumFileName=`ls $webvpnTmpDir$file | sort -n -r |head -n 1`
isTrueSame=$(($bigNumFileName + 1 == $fileCount))
if [[ $cTimeStamp -gt 60 && $isTrueSame == 1 ]]
then
#echo "merge file--->$file"
for ((i=0;i<=$bigNumFileName;i++))
do echo $webvpnTmpDir$file"/"$i;
done | xargs -i cat {} >> "$webvpnDataDir"${file/'_web_'/'_web_'$fileNewDate'_'}".tmp"
rm -rf $webvpnTmpDir$file
mv "$webvpnDataDir"${file/'_web_'/'_web_'$fileNewDate'_'}".tmp" "$webvpnDataDir"${file/'_web_'/'_web_'$fileNewDate'_'}".txt"
fi
done
}
function doWhileListFiles()
{
while true
do
listFiles
done
}
doWhileListFiles