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

43

我想删除7天之前的文件和文件夹,所以我尝试了以下操作

[17:07:14 root@client01.abc.com:~]# 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天之前的文件/文件夹的正确方法是什么?


可能是Shell脚本删除n天前的目录的重复问题。 - jww
你想用一个find命令删除目录和文件吗?还是分两个命令执行可以接受? - chrisinmtown
5个回答

86
您可以使用这段代码。
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 {} \;

它是否也会删除/tmp/目录中7天前的文件夹? - roy
我正在编辑以删除目录信息,也请检查底部@roy。 - Tolga Varol
10
我要说出来。find 命令是我曾经运行过的最可怕和危险的命令。一个错误的操作顺序、执行字符串中缺少引号、简单的逻辑错误?你可能会意外地删除或修改一整个你没有预料到的项目列表。如果你在没有先使用 -exec 运行它的情况下运行它,那么不带引号的项目就不会被传递给命令。我强烈建议先通过“-exec ls {} ;”运行它,以确保由于空格或其他字符造成的奇怪分离不会导致你的 * 选定了一系列你没有预期的项目。 - EricDAltman
1
我认为这是实现Roy所要求的最佳方法。因为首先您考虑删除文件,然后可以安全地删除空目录。为此,您可以使用以下命令:find /tmp/ -type d -empty -delete - Paolovip
最好先进行干运行,不要加上“-exec rmdir () ;”参数,以确保安全。 - Sp4cecat

17
更容易的方法是直接去做。
find /tmp/* -mtime +7 -exec rm -rf {} \; 

哪个命令可以删除文件和目录?


您的命令有效,但它会删除所有文件和文件夹,即使它们不为空。 - Paolovip

7

我的简单方法:

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

daystart选项可以从今天开始计算时间,而不是从24小时前开始计算。

参考文献:官方文档


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

删除文件。

find /tmp/ -empty -type d -delete

删除空目录。


0
我推荐使用这个一行代码来删除所有8天之前的旧文件:
find /tmp/ -mtime +8 -type f -exec rm {} \; -o \
  -mtime +8 -type d -empty -exec rmdir {} \;
-o 会将文件和目录分开,这样我们就不会删除目录,然后因为文件不存在而出现错误。它还会删除包含较新文件的目录中的旧文件。
这可能导致空目录保留8天,因为删除文件会更新目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接