recursion地查找所有比给定时间更新的文件

给定一个time_t:

⚡ date -ur 1312603983 Sat 6 Aug 2011 04:13:03 UTC 

我正在寻找一个bash单行,列出所有新的文件。 比较应考虑到时区。

就像是

 find . --newer 1312603983 

但用time_t而不是文件

这是有点迂回,因为touch不需要一个原始的time_t值,但它应该在脚本中很安全地完成这项工作。 ( date-r选项存在于MacOS X中;我没有对GNU进行双重检查)。通过直接在touch命令行中写入命令replace,可以避免“时间”variables。

 time=$(date -r 1312603983 '+%Y%m%d%H%M.%S') marker=/tmp/marker.$$ trap "rm -f $marker; exit 1" 0 1 2 3 13 15 touch -t $time $marker find . -type f -newer $marker rm -f $marker trap 0 

你可以find每个文件在最后一天创build/修改的内容,使用这个例子:

 find /directory -newermt $(date +%Y-%m-%d -d '1 day ago') -type f -print 

在上周find所有的东西,用'1周前'或'7天前'任何你想要的

也许有人可以使用它。 find在一定时间范围内recursion修改的所有文件,只需运行:

 find . -type f -newermt "2013-06-01" \! -newermt "2013-06-20" 

你也可以做这个没有标记文件。

迄今为止的%s格式是自纪元以来的秒数。 find的-mmin标志在几分钟之内就会有一个参数,所以把这个差值除以60即可。而在age之前的“ – ”表示find最后修改时间小于age的文件。

 time=1312603983 now=$(date +'%s') ((age = (now - time) / 60)) find . -type f -mmin -$age 

使用更新版本的gnu,您可以使用-newermt,这使得它变得微不足道。

给定1494500000的unix时间戳(自纪元以来的秒数),请执行:

 find . -type f -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d @1494500000)" 

grep这些文件的“富”:

 find . -type f -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d @1494500000)" -exec grep -H 'foo' '{}' \; 

所以还有另外一种方式(它在一定程度上是可移植的

 (python <<EOF import fnmatch import os import os.path as path import time matches = [] def find(dirname=None, newerThan=3*24*3600, olderThan=None): for root, dirnames, filenames in os.walk(dirname or '.'): for filename in fnmatch.filter(filenames, '*'): filepath = os.path.join(root, filename) matches.append(path) ts_now = time.time() newer = ts_now - path.getmtime(filepath) < newerThan older = ts_now - path.getmtime(filepath) > newerThan if newerThan and newer or olderThan and older: print filepath for dirname in dirnames: if dirname not in ['.', '..']: print 'dir:', dirname find(dirname) find('.') EOF ) | xargs -I '{}' echo found file modified within 3 days '{}'