>

shell脚本删除N天前的文件夹,定期删除日志

- 编辑:澳门新葡亰平台游戏 -

shell脚本删除N天前的文件夹,定期删除日志

shell脚本删除N天前的文件夹

背景:

每日构建的东西,按日期放到不同的文件夹里。如今天的构建放到2015-06-01里,明天的就放到2015-06-02里,依次类推。时间久了,需要一个脚本删除N天前的文件夹。(本例中N=7,即删除一周前的构建)。

下面直接上代码,linux版:

#! /bin/bash

historyDir=~/test/

today=$(date +%Y-%m-%d)

echo "---------today is $today-----------"

tt=`date -d last-week +%Y-%m-%d`

echo "next is to delete release before $tt"

tt1=`date -d $tt +%s` #小于此数值的文件夹删掉

#echo $tt1

for file in ${historyDir}*

do

if test -d $file

then

name=`basename $file`

#echo $name

curr=`date -d $name +%s`

if [ $curr -le $tt1 ]

then

echo " delete $name-------"

rm -rf ${historyDir}${name}

fi

fi

done

注意事项:

1,historyDir=~/test/后面一定要带/,否则在后面的遍历文件夹时for file in ${historyDir}*会对应不上。

2,在linux下通过today=$(date +%Y-%m-%d)获得格式为2015-06-01类型的日期,通过

tt1=`date -d $tt +%s`

得到整形的时间戳。当然也可以在获得时间的时候就用$(date +%s)这样直接得到的就是时间戳,不用再转换了,但是日期是默认的年月日小时分秒的格式转换的时间戳。

PS:MAC下不行。

3,linux里通过date -d last-week +%Y-%m-%d来获得一周前的日期。

PS:MAC下没行。

4,通过 if test -d $file来判断文件夹是否存在,-f是判断文件是否存在。

name=`basename $file`

这句话获得文件夹的名字,之后是将名字(也就是日期)转为时间戳比较。

MAC上的代码

#! /bin/bash

historyDir=~/test/

today=$(date +%Y-%m-%d)

echo "---------today is $today-----------"

today1=`date -j -f %Y-%m-%d $today +%s`

#echo "today1=$today1"

#求一周前的时间

tt=$(date -v -7d +%Y-%m-%d)

echo "next is to delete release before $tt"

tt1=`date -j -f %Y-%m-%d $tt +%s` #linux上可以这样`date -d $tt +%s` #小于此数值的文件夹删掉

#echo $tt1

for file in ${historyDir}*

do

if test -d $file

then

name=`basename $file`

echo $name

curr=`date -j -f %Y-%m-%d $name +%s`

if [ $curr -le $tt1 ]

then

echo " delete $name"

rm -rf ${historyDir}${name}

fi

fi

done

echo "--------------end---------------"

跟linux上不同之处有二:

1,将字符串的时间转为整数的时间戳时,mac上要这样:

today1=`date -j -f %Y-%m-%d $today +%s`

2,获得7天之前的日期mac上要这样:

tt=$(date -v -7d +%Y-%m-%d)

澳门新葡亰平台游戏 1


背景: 每日构建的东西,按日期放到不同的文件夹里。如今天的构建放到2015-06-01里,明天的就放到2015-06-02里,...

 

 

定期删除日志:

  

 

#dir="/Users/Ethan/Library/MobileDevice/Provisioning Profiles/"
dir="/Users/Ethan/Desktop/test/"


filelist=`ls "${dir}"`
#echo $filelist

for filename in $filelist
do
PROFILE_FILE="${dir}${filename}"
#echo ${PROFILE_FILE}
appidname=`egrep -a -A 2 AppIDName "${PROFILE_FILE}" | grep string | sed -e 's/<string>//' -e 's/</string>//' -e 's/ //'`
#echo $appidname
IdentifierPrefix=`egrep -a -A 2 ApplicationIdentifierPrefix "${PROFILE_FILE}" | grep string | sed -e 's/<string>//' -e 's/</string>//' -e 's/ //'`
#echo $IdentifierPrefix


first=${appidname:0:2}

if [ ${IdentifierPrefix} == "H57E834M6D" ]&&[ ${first} == "m" ]
then
rm "${PROFILE_FILE}"
fi


done

然后建立清除日志文件的shell脚本,文件名为clean_log
只保留最近三天的日志

  由于某种原因,xcode帮我按照了几千个开发和上线证书,需要删除这部分证书:

#! /bin/bash
logdir=/var/log/httpd
cd ${logdir}
declare -i filesum=`澳门新葡亰平台游戏,ls access_log.* | wc -l`
declare -i delnum=$filesum-3
if [ "${delnum}" -ge 1 ];then
rm -rf `ls -tr access_log.* | head -${delnum}`
fi

chmod 755 clean_log
这样就保留了最近3天的日志文件。
建立自动化任务
01 04 * * * /usr/local/crontab/clean_log
ok,搞定,就这么简单。这样你就不用不必为日见增大的日志文件烦恼了!

 

本文由服务器发布,转载请注明来源:shell脚本删除N天前的文件夹,定期删除日志