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 '{}'