shell脚本删除N天前的文件夹-----附linux和mac上date命令的不同

背景:

每日构建的东西,按日期放到不同的文件夹里。如今天的构建放到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+(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,http://willzh.iteye.com/blog/459808

2,http://apple.stackexchange.com/questions/115830/shell-script-for-yesterdays-date

时间: 2024-08-05 22:17:30

shell脚本删除N天前的文件夹-----附linux和mac上date命令的不同的相关文章

Windows自动删除n天前的文件的批处理脚本

数据库每天备份文件,然而只需要保留七天的备份即可,编写一个批处理脚本文件自动删除七天前的文件并设置定时任务 自动删除文件需要用到forfiles命令 forfiles参数:/p 指定的路径/s 包括子目录/m 查找的文件名掩码/d 指定日期,有绝对日期和相对日期, 此处-7指当前日期 的7天前   /c 运行的命令行   表示为每个文件执行的命令.命令字符串应该用双引号括起来. 默认命令是 "cmd /c echo @file".下列变量 可以用在命令字符串中: @file    -

python脚本删除n天前文件可用于windows,linux并且支持跨平台

脚本如下: #!/usr/local/python/bin/python # -*-coding=utf8 -*- import time import os, sys # 设置删除多少天前的文件 N = 3 #要删除路径 path = r'/tmp/wry/abc' def deletefile(path): for eachfile in os.listdir(path): filename = os.path.join(path, eachfile) if os.path.isfile(f

用批处理文件自动备份文件及文件夹,并自动删除n天前的文件

---恢复内容开始--- 下是备份的批处理,添加到"计划任务"中,设定时间自动运行 复制代码 代码如下:@echo off rem 格式化日期 rem date出来的日期是"2006-02-22 星期三",不能直接拿来使用,所以应该先格式化一下 rem 变成我们想要的.date:~0,4的意思是从0开始截取4个字符 set d=%date:~0,4%%date:~5,2%%date:~8,2% rem 设定压缩程序路径,这里用的是WINRAR的rar.exe进行打包

postgreSQL备份脚本删除3天前备份同时压缩昨天备份

脚本功能: 系统环境:SUSE Linux Server 11.3 X64 1.删除3天前压缩文件(.bak.tar.gz) 2.备份数据库(未压缩文件.bak) 3.压缩昨天数据库备份文件(.bak.tar.gz),删除昨天数据库备份未压缩文件(.bak) #!/bin/bash export PATH=$PATH:/usr/local/pgsql/bin DATE=`date +%Y_%m_%d_%H` YESDAY=`date -d "yesterday" +%Y_%m_%d_%

windows下自动删除n天前的文件

使用windows2003下的内置命令forfiles配合计划任务可以实现自动删除n天前的文件. windows2003中设定自动执行的计划任务很简单. 一.脚本编写 forfiles命令用法: Forfiles 从文件夹或树中选择要进行批处理的文件. 语法 forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}] [{MM/DD/YYYY | DD}]] 参数 /p Path 指定 Path,表明要从哪里开始搜索.默认的

windows2003下自动删除n天前的文件

使用windows2003下的内置命令forfiles配合计划任务可以实现自动删除n天前的文件. windows2003中设定自动执行的计划任务很简单. forfiles命令用法: Forfiles 从文件夹或树中选择要进行批处理的文件. 语法 forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}] [{MM/DD/YYYY | DD}]] 参数 /p Path 指定 Path,表明要从哪里开始搜索.默认的文件夹是当前工

CentOS 6.9使用Shell脚本实现FTP自动上传和下载文件

一.安装配置FTP: # yum -y install vsftpd # service vsftpd start # ss -tunlp | grep 21 //添加本地FTP登录用户ftpuser # useradd ftpuser # echo 123456 | passwd --stdin ftpuser # cd /etc/vsftpd/ # cp vsftpd.conf vsftpd.conf.bak # vim vsftpd.conf //允许本地用户登录FTP且对FTP具有写权限

linux中find批量删除空文件及空文件夹

linux下批量删除空文件(大小等于0的文件)的方法  代码如下 复制代码 find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指定大小的文件,只要修改对应的 -size 参数就行,例如:  代码如下 复制代码 find . -name "*" -type f -size 1024c | xargs -n 1 rm -f 就是删除1k大小的文件.(但注意不要用 -size 1k,这个得到的是占用空

JAVA之File类-删除一个有内容的文件夹

package ioTest.io3; /* * 删除有内容的文件夹:从最里面一直向外删除.建议千万不要删除硬盘上面有用的文件夹哦 * 方法思路 * 循环+递归 */ import java.io.File; public class RemoveDir { public static void main(String[] args) { // TODO Auto-generated method stub File file=new File("F:\\removeDirTest")