linux按指定时间删除文件和文件夹

Posted

tags:

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

[root@oracledb tmp]# ll -rt
total 5004
-rw-r--r-- 1 root root 102912 Oct 25 2011 orabbixw.exe
-rw-r--r-- 1 root root 74240 Oct 25 2011 orabbix.exe
-rw-r--r-- 1 root root 26 Oct 25 2011 uninstall.cmd
-rw-r--r-- 1 root root 221 Oct 25 2011 run.sh
-rw-r--r-- 1 root root 350 Oct 25 2011 run.bat
-rw-r--r-- 1 root root 34090 Oct 25 2011 orabbix-1.2.3.jar
-rw-r--r-- 1 root root 809 Oct 25 2011 install.cmd
drwxr-xr-x 2 root root 4096 Oct 25 2011 init.d
-rw-r--r-- 1 root root 4858160 Mar 1 10:50 orabbix-1.2.3.zip
drwxr-xr-x 2 root root 4096 Mar 1 11:13 orabbix
drwxr-xr-x 2 root root 4096 Mar 1 11:31 doc
drwxr-xr-x 2 root root 4096 Mar 1 11:31 lib
drwxr-xr-x 2 root root 4096 Mar 1 11:31 template
drwxr-xr-x 2 root root 4096 Mar 1 11:31 conf
如上所示。我要删除“Oct 25 2011”的文件和文件夹,请大神赐教,谢谢

find 命令可以完成这一需求,比如删除3天前的所有以“.log”结尾的文件:

find /文件路径 -name "*.log" -mtime +2 -exec rm \\;

说明: 

1. 文件路径是目标文件所在路径;

2. -name 设定目标文件名,建议采用,否则可能误删其他文件;

3. -ctime 文件最后一次修改时间,后面只能用整数,单位为天,同时,还有atime,mtime,amin,cmin,mmin等时间参数可选,具体请查看帮助;

4. 时间说明如下图(随手画的,大概是这个意思),所以删除三天前的文件要用+2

5. -exec 表示需要执行的命令,代表find找到的内容,"\\;"是固定写法表示结束-exec,

所以例子的"-exec rm \\;" 就表示对find找到的符合条件的文件执行删除操作

参考技术A 如果文件不多余200个,那可以使用ls

ls --full-time |grep '2011-10-17'|awk 'print$9'

获得的文件名的结果,进行for循环,逐个删除

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小时的文件。这样把 整天的文件就截断了。

以上是关于linux按指定时间删除文件和文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何删除子目录下所有指定后缀文件?

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

linux按年份删除文件?

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

Linux shell:定时删除指定时间之前的文件

在Linux中设置计划删除指定时间的文件