shell脚本,根据时间范围压缩时间目录成一个文件

来源:互联网 发布:pua倪 网络课程9.0 编辑:程序博客网 时间:2024/06/05 06:18

Linux服务器下存放文件目录是通过日期(yyyyMMdd)创建的,现在要根据一个日期范围(yyyy-MM-dd)把多个目录压缩成一个文件。

#!/bin/sh

#通过参数把子目录、时间起始范围传进来

#子目录
adudid=${1}

#开始时间,如2015-05-19
daybegin=${2}

#结束时间,如2015-05-20
dayend=${3}
sourceFolder='/mnt/programs/resource/screenimg/'
targetFolder='/mnt/programs/resource/screenimg/'

#一天的秒数
dayms=$[24*60*60]
echo "dayms ${dayms}"

#将时间换成yyyy-MM-dd HH:mm:ss格式
daybeginms=`date -d "${daybegin} 00:00:00" +%s`
dayendms=`date -d "${dayend} 00:00:00" +%s`
sourceZipFolder=${sourceFolder}${adudid}'/'`date -d "1970-01-01 UTC ${daybeginms} seconds" +%Y%m%d`

#这个应该写成无限循环
for ((i=0;i<500;i++));
do
    echo ${daybeginms} 'compare to' ${dayendms}

#比较时间
    if [ ${daybeginms} -eq ${dayendms} ]; then break
    else
        daybeginms=$[${daybeginms} + ${dayms}]
        sourceZipFolder="${sourceZipFolder} ${sourceFolder}${adudid}/`date -d "1970-01-01 UTC ${daybeginms} seconds" +%Y%m%d`"
    fi
    echo ${daybeginms} 'compare result' ${dayendms}
done
echo ${sourceZipFolder}

#压缩文件的名称
filename=${adudid}'_'`date -d "1970-01-01 UTC ${daybeginms} seconds" +%Y%m%d`'_'`date -d "1970-01-01 UTC ${dayendms} seconds" +%Y%m%d`'.tar'

#拼接的命令

cmdstr="tar -cf ${targetFolder}${filename} ${sourceZipFolder}"
echo ${cmdstr}
`${cmdstr}`


总结:

刚开始也是各种不会,还好可以在网上查询到相关文章。

1、shell时间(字符串和时间戳转换)

在shell中,字符串转换为时间戳可以这样做:
date -d "2010-10-18 00:00:00" +%s
输出形如:
1287331200
其中,-d参数表示显示指定的字符串所表示的时间,+%s表示输出时间戳。
而时间戳转换为字符串可以这样做:
date -d @1287331200
输出形如:
Mon Oct 18 00:00:00 CST 2010
文章来源:http://www.codelast.com/
如果要转换成“2010-10-18 00:00:00”这种形式的时间戳,则这样做:
date -d "1970-01-01 UTC 1287331200 seconds" "+%F %T"
输出形如:
2010-10-18 00:00:10
再多废话一句,如果只要输出日期,不要时间,则去掉 %T 就可以了:
date -d "1970-01-01 UTC 1287331200 seconds" +%F
输出形如:
2010-10-18

转自:http://blog.csdn.net/taijianyu/article/details/6907278

在xshell终端输入“date --help”,可以看到date命令的其它介绍,如果要把秒转换成yyyyMMdd格式,可以:date -d "1970-01-01 UTC 1287331200 seconds" +%Y%m%d


2、for循环,if使用,数字比较大小等

转自:http://blog.sina.com.cn/s/blog_9d074aae01012ytf.html

http://bbs.chinaunix.net/thread-563864-1-1.html

http://www.jb51.net/article/34332.htm

http://blog.sina.com.cn/s/blog_7ec3252d01013l2w.html

需要注意的是for循环后面是双括号,而且要与for关键字保持一个空格的距离;if也是要与后面的[ ... ]保持距离,而且[]还要与里面的内容保持一个空格的距离。


3、数字的运算,比如加减乘除什么的

http://blog.csdn.net/taijianyu/article/details/6907288

0 0