删除今天之前创建的文件

use*_*928 3 command-line files find

我想搜索创建日期早于今天的文件。
我愿意 :

find $HOME -type f -name "myFile_*.sql.zip" -mtime +1
Run Code Online (Sandbox Code Playgroud)

但它不返回任何内容,它至少应该返回一个文件。

我哪里错了?

hee*_*ayl 6

find-mtime +1已被篡改两个或更多天前返回文件。

这是一种记录在案的行为,即-mtime忽略任何小数部分。从man find(时间计算在-atime-mtime和 中相同-ctime):

-atime n

文件最后一次访问是在 n*24 小时前。当 find 计算出该文件在多少 24 小时前被上次访问时,任何小数部分都将被忽略,因此要匹配 -atime +1,文件必须至少在两天前被访问过。

现在,如果您可以使用几种解决方案:

  1. 你可以做:

    find . -type f -mtime +0
    
    Run Code Online (Sandbox Code Playgroud)

    这将使您在一天或更长时间前修改文件。

    在你的情况下:

    find $HOME -type f -name "myFile_*.sql.zip" -mtime +0
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为了获得这种情况下的精度,您应该使用-mmin严格匹配分钟的选项。

    因此,假设您想要获取修改时间超过 7 小时 10 分钟(即 430 分钟前)的文件,您可以执行以下操作:

    find . -type f -mmin +430
    
    Run Code Online (Sandbox Code Playgroud)

    在您的情况下,进行计算并替换430为该值:

    find $HOME -type f -name "myFile_*.sql.zip" -mtime +430
    
    Run Code Online (Sandbox Code Playgroud)
  3. 另一种选择是以相反的方式进行。

    您可以创建一个参考文件,例如ref.txt

     touch -d 'today + 2 days ago' ref.txt
    
    Run Code Online (Sandbox Code Playgroud)

    现在您可以找到最近修改的文件ref.txt

    find . -type f -newer ref.txt
    
    Run Code Online (Sandbox Code Playgroud)

    在你的情况下:

    find $HOME -type f -name "myFile_*.sql.zip" -newer ref.txt
    
    Run Code Online (Sandbox Code Playgroud)

一旦您对结果感到满意,您可以删除文件,例如:

find . -type f -mmin +430 -delete
Run Code Online (Sandbox Code Playgroud)