linux 删除指定日期之前的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 删除指定日期之前的文件相关的知识,希望对你有一定的参考价值。

find . -mtime +n -type f | xargs rm -f 这个只能删除以当前时间为基准n*24小时之前的,怎么删除比如8月20日之前的文件,要求把当天日期的文件也全部删掉。

你的意思是删除某天之前的所有文件对吧?比如21号之前的文件,就是你所说的20日之前的文件,以及20日当天的文件。我没理解错吧?

我像你们一样,首先,通过find查找文件。

然后计算,文件修改日期是否在限定的日期之前,如果是,那么删除文件。


我把命令写到了bash脚本里面。

使用方法:

chmod +x  ./del_file_before_that_day.sh        #给文件添加执行权限

./del_file_before_that_day.sh  "2013-8-21"

回车,

拖动要处理的文件夹到终端,即可完成处理。


楼主,你可以参考一下。顺便说一下,我把rm命令注释掉了,等你测试好脚本,再去除注释吧,以免因为执行环境不同,结果出偏差,给你带来损失。

参考技术A 假如在一个目录中保留最近30天的文件,30天前的文件自动删除
#find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f ;/tmp –设置查找的目录;
-mtime +30 –设置时间为30天前;
-type f –设置查找的类型为文件;
-name *.sh[ab] –设置文件名称中包含sha或者shb;
-exec rm -f –查找完毕后执行删除操作;
提示:将此命令写入crontab后即可自动完成查找并删除的工作
另外的方法大同小异:
#find /tmp -mtime +30 -type f | xargs rm -rf
参考技术B 假如在一个目录中保留最近30天的文件,30天前的文件自动删除
  #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f \;
  /tmp --设置查找的目录;
  -mtime +30 --设置时间为30天前;
  -type f --设置查找的类型为文件;
  -name *.sh[ab] --设置文件名称中包含sha或者shb;
  -exec rm -f --查找完毕后执行删除操作;
  提示:将此命令写入crontab后即可自动完成查找并删除的工作
  另外的方法大同小异
  #find . -mtime +30 -type f | xargs rm -rf追问

这个不能按整天截取,然后删除。
#find /tmp -mtime +1 -type f -name *.sh[ab] -exec rm -f \;
删除的不是一天前的,而是以现在时间为起点,24小时的文件。这样把 整天的文件就截断了。

删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + VBS

代码如下:

@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了临时VBS代码进行日期计算,并统一设置系统日期格式,处理完毕
::之后再把日期格式恢复成原来的状态。摆脱了对reg命令(XP系统自带)的依赖。
rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1
>"%temp%/BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%/BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER/Control Panel/International/sShortDate")
for /f %%a in (‘cscript /nologo "%temp%/BackupDate.vbs"‘) do (
    set "RegDateOld=%%a"
)
>"%temp%/UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%/UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER/Control Panel/International/sShortDate", "yyyy-M-d", "REG_SZ"
cscript /nologo "%temp%/UnifyDate.vbs"
>"%temp%/DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%/DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in (‘cscript /nologo "%temp%/DstDate.vbs"‘) do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
for /r "%SrcDir%" %%a in (*.*) do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
>"%temp%/RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%/RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER/Control Panel/International/sShortDate", "%RegDateOld%", "REG_SZ"
cscript /nologo "%temp%/RecoverDate.vbs"
pause

  

以上是关于linux 删除指定日期之前的文件的主要内容,如果未能解决你的问题,请参考以下文章

linux 定时任务,压缩 日志,并删除掉 指定日期之前的 日志

linux 删除指定日期之前的文件

linux 删除指定日期之前的文件

linux如何查询指定日期的系统安全日志

linux 按日期删除文件里面的内容,怎么删除

删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + REG + VBS