find
对于查找比X天前find
修改后更多的文件有很好的支持,但是如何使用它来查找在特定日期之后修改过的所有文件?
我无法在find
手册页中找到任何可用于执行此操作的功能,只能与另一个文件的时间进行比较,或者检查创建的时间与现在的时间之间的差异。用所需的时间制作文件并与之进行比较是这样做的唯一方法吗?
find
对于查找比X天前find
修改后更多的文件有很好的支持,但是如何使用它来查找在特定日期之后修改过的所有文件?
我无法在find
手册页中找到任何可用于执行此操作的功能,只能与另一个文件的时间进行比较,或者检查创建的时间与现在的时间之间的差异。用所需的时间制作文件并与之进行比较是这样做的唯一方法吗?
Answers:
如果只有“较新的文件”,则可以采用以下解决方法:
touch -t 201003160120 some_file
find . -newer some_file
男人碰:
-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time
假设您的触摸具有此选项(我的触摸为5.97)。
不可以,您可以使用日期/时间字符串。
来自man find
:
-newerXY reference
将当前文件的时间戳与引用进行比较。reference参数通常是文件名(其时间戳之一用于比较),但也可以是描述绝对时间的字符串。X和Y是其他字母的占位符,这些字母选择属于参考的方式用于比较的时间。a The access time of the file reference B The birth time of the file reference c The inode status change time of reference m The modification time of the file reference t reference is interpreted directly as a time
例:
find -newermt "mar 03, 2010" -ls
find -newermt yesterday -ls
find -newermt "mar 03, 2010 09:00" -not -newermt "mar 11, 2010" -ls
与问题没有直接关系,但对于在这里绊倒的人可能会很有趣。
find命令不直接支持-older参数来查找早于某些必需日期的文件,但是您可以使用negate语句(使用接受的答案示例):
touch -t 201003160120 some_file
find . ! -newer some_file
将返回早于提供日期的文件。
您可以使用这样的脚本
#!/bin/bash
if [ $# -ne 1 ];then
when="today"
else
when=` date -d "$1" +"%s" `
fi
now=`date +"%s"`
seconds=`echo "$when - $now" | bc`
minutes=`echo "$seconds / 60 " | bc `
find . -cmin $minutes -print
将其保存为$ newerthan并使其可执行。
然后,您可以找到在特定日期之后修改的文件,如下所示:
newerthan "2010-03-10"
要么
newerthan "last year"
要么
newerthan "yesterday"
那应该做你想要的。我不认为没有内置的方法可以实现此目的。
bc
整数数学,Bash可以做到:((seconds = when - now))
,to的format参数date
应该有一个加号date +%s
,某些系统可能没有date -d
find ! -newermt “<DATE>”
像这样:
find ! -newermt “jan 01 2015”
这将为您提供当前目录中早于2015年1月1日的文件。