use*_*928 3 command-line files find
我想搜索创建日期早于今天的文件。
我愿意 :
find $HOME -type f -name "myFile_*.sql.zip" -mtime +1
Run Code Online (Sandbox Code Playgroud)
但它不返回任何内容,它至少应该返回一个文件。
我哪里错了?
find与-mtime +1已被篡改两个或更多天前返回文件。
这是一种记录在案的行为,即-mtime忽略任何小数部分。从man find(时间计算在-atime、-mtime和 中相同-ctime):
-atime n
文件最后一次访问是在 n*24 小时前。当 find 计算出该文件在多少 24 小时前被上次访问时,任何小数部分都将被忽略,因此要匹配 -atime +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)为了获得这种情况下的精度,您应该使用-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)另一种选择是以相反的方式进行。
您可以创建一个参考文件,例如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)