查找并删除超过 x 天的文件或文件夹

问题描述 投票:0回答:6

我想删除超过 7 天的文件和文件夹,所以我尝试了

[17:07:14 [email protected]:~]# find /tmp/ -mindepth 1 -maxdepth 1 -ctime +7 -exec ls -l {} \;

因此,当我运行

find /tmp/ -mindepth 1 -maxdepth 1 -ctime +7 -exec ls -l {} \;
时,它不会显示任何目录,但对于
find /tmp/ -mindepth 1 -maxdepth 2 -ctime +7 -exec ls -l {} \;
,它确实在子目录中显示了几个文件。

删除某个特定目录中超过 7 天的文件/文件夹的正确方法是什么?

linux shell automation
6个回答
100
投票

你可以利用这段代码

find /tmp/* -mtime +7 -exec rm {} \;

解释

  • 第一个参数是文件的路径。这可以是路径、目录或通配符,如上例所示。我建议使用完整路径,并确保在不使用 exec rm 的情况下运行命令,以确保获得正确的结果。

  • 第二个参数

    -mtime
    用于指定文件存在的天数。如果输入
    +7
    ,它将查找超过 7 天的文件。

  • 第三个参数

    -exec
    ,允许您传入命令,例如 rm。需要末尾的
    {} \;
    来结束命令。

来源:http://www.howtogeek.com/howto/ubuntu/delete-files-older-than-x-days-on-linux/

要删除文件夹,清空其中的内部后,您可以在代码段中

rmdir
代替
rm
,如果您只想查看目录,则可以添加

-type d

如下所示的一段代码:

find /tmp/*/* -mtime +7 -type d -exec rmdir {} \;

19
投票

更容易做

find /tmp/* -mtime +7 -exec rm -rf {} \; 

这将删除文件和目录


12
投票

我的简单方法:

find /tmp/* -daystart -mtime +7 -delete

daystart
选项测量从今天开始的时间,而不是从 24 小时前开始

参考:官方文档


6
投票
find /tmp/* -mtime +7 -type f -exec rm {} \;

删除文件。

find /tmp/ -empty -type d -delete

删除空目录。


0
投票

我推荐这个oneliner在8天内删除所有旧文件:

find /tmp/ -mtime +8 -type f -exec rm {} \; -o \
  -mtime +8 -type d -empty -exec rmdir {} \;

-o
分割文件和目录,这样我们就不会删除目录然后因为文件不存在而出现错误。它还会删除包含新文件的目录中的旧文件。

这可能会导致空目录在删除文件更新目录后多停留 8 天。


0
投票

在此处添加替代方案仅供将来参考

-

mtime +240
表示240天(约8个月)

  1. 删除超过 8 个月的文件

rm $(find folder/* -type f -mtime +240) 

  1. 删除超过 8 个月的文件夹

    rm $(find folder/* -type d -mtime +240)

© www.soinside.com 2019 - 2024. All rights reserved.