明天的就放到2015-06-02里

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

明天的就放到2015-06-02里。明天的就放到2015-06-02里。明天的就放到2015-06-02里。背景:

每天创设的东西,按日期放到差异的文书夹里。如后天的营造放到二零一六-06-01里,后天的就停放二零一五-06-02里,依次类推。时间久了,需求三个剧本删除N天前的文件夹。(本例中N=7,即除去18日前的营造)。

上面直接上代码,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)得到格式为二零一五-06-01项指标日子,通过

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

收获整形的时日戳。当然也能够在取得时间的时候就用$(date
+%s)那样一向拿走的便是岁月戳,不用再转移了,不过日子是私下认可的年月日小时分秒的格式转变的年华戳。

PS:MAC下不行。

3,linux里经过date -d last-week +%Y-%m-%d来获得28日前的日子。

PS:MAC下没行。

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

name=`basename $file`

www.602.net,那句话赢得文件夹的名字,之后是将名字(也等于日期)转为时间戳比较。

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)

www.602.net 1


背景:
每一日创设的东西,按日期放到差别的文本夹里。如明日的构建放到二零一六-06-01里,前些天的就放置二零一五-06-02里,…

发表评论

电子邮件地址不会被公开。 必填项已用*标注