find
有很好的支持find文件更多的修改less于X天前,但我怎样才能使用find
定位所有文件修改后的某个date?
我找不到在find
手册页中的任何内容来做到这一点,只是比较另一个文件的时间或检查创build时间和现在之间的差异。 正在制作一个具有所需时间的文件,并与唯一的方法做比较?
如果你只有“更新文件”,那么你可以采取这个解决方法:
touch -t 201003160120 some_file find . -newer some_file
男人接触:
-t STAMP use [[CC]YY]MMDDhhmm[.ss] instead of current time
假设你的触摸有这个选项(我的触摸5.97)。
不,您可以使用date/时间string。
从man find
:
-newerXY参考
将当前文件的时间戳与参考进行比较。 引用参数通常是文件的名称(其中一个时间戳用于比较),但也可能是描述绝对时间的string。 X和Y是其他字母的占位符,这些字母select哪个时间属于如何使用引用来进行比较。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命令不直接支持用于查找超过某些所需date的文件的-older参数,但可以使用否定语句(使用接受的答案示例):
touch -t 201003160120 some_file find . ! -newer some_file
将返回比提供date更早的文件。
find <dir> -mtime -20
此查找命令将查找在过去20天内修改的文件。
您可以添加其他限制,如:
find <dir> -mtime -20 -name "*.txt"
与以前一样,但只能find以“.txt”结尾的文件。
只需要添加 – 你甚至可以使用两个newermt参数在一个时间间隔内进行search:
find ! -newermt "apr 01 2007" -newermt "mar 01 2007" -ls
从三月2007find所有文件。
你可以使用这样的脚本
#!/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
将它保存在$ PATH中作为“newerthan”并使其可执行。
然后你可以find这样的特定date后修改的文件:
newerthan "2010-03-10"
要么
newerthan "last year"
要么
newerthan "yesterday"
这应该做你想要的。 否则我不认为有内置的方法来实现这一点。
如果你的date格式化为可以比较的话,
mydate=201003160120 find . -type f -printf "%AY%Am%Ad%AH%AM%AS/:%p\n" | awk -vd="$mydate" -F'/:' '$1 > d{ print $2 }'