shell 脚本实现 合并文件夹中的文件为一个文件-自用

    技术2022-07-11  77

     

    说明:

    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

     

     

    Processed: 0.010, SQL: 12