给定time_t:
⚡ date -ur 1312603983
Sat 6 Aug 2011 04:13:03 UTC
我正在寻找一个bash one-liner,列出所有较新的文件。比较应考虑时区。
像
这样的东西find . --newer 1312603983
但是使用time_t而不是文件。
答案 0 :(得分:126)
您可以找到最后一天创建/修改的每个文件,使用此示例:
find /directory -newermt $(date +%Y-%m-%d -d '1 day ago') -type f -print
在上周查找所有内容,请使用“1周前”或“7天前” 你想要的任何东西
答案 1 :(得分:22)
也许有人可以使用它。查找在递归的特定时间范围内修改的所有文件,只需运行:
find . -type f -newermt "2013-06-01" \! -newermt "2013-06-20"
答案 2 :(得分:16)
这有点迂回,因为touch
没有采用原始time_t
值,但它应该在脚本中非常安全地完成工作。 (-r
的{{1}}选项出现在MacOS X中;我没有仔细检查过GNU。)通过直接在{{1}中编写命令替换,可以避免'time'变量命令行。
date
答案 3 :(得分:10)
给定1494500000
的unix时间戳(自纪元以来的秒数),执行:
find . -type f -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d @1494500000)"
为" foo":
grep这些文件find . -type f -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d @1494500000)" -exec grep -H 'foo' '{}' \;
答案 4 :(得分:5)
您也可以在没有标记文件的情况下执行此操作。
迄今为止的%s格式是自纪元以来的秒数。 find的-mmin标志以分钟为单位取一个参数,因此将差值除以秒数。并且年龄前面的“ - ”表示查找最后一次修改小于年龄的文件。
time=1312603983
now=$(date +'%s')
((age = (now - time) / 60))
find . -type f -mmin -$age
使用较新版本的gnu find,你可以使用-newermt,这使它变得微不足道。
答案 5 :(得分:0)
所以还有另一种方式(它在某种程度上可移植_
(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 '{}'
答案 6 :(得分:0)
假设是现代版本,find -newermt
的功能很强大:
find -newermt '10 minutes ago' ## other units work too, see `Date input formats`
find -newermt @1568670245
作为参考,-newermt
并未直接在手册页中列出以供查找。相反,它显示为-newerXY
,其中XY
是mt
的占位符。其他替代产品是合法的,但不适用于此解决方案。
来自man find -newerXY
:
时间规范被解释为GNU date的-d选项的参数。
因此,以下等效于初始示例:
find -newermt "$(date '+%Y-%m-%d %H:%M:%S' -d '10 minutes ago')" ## long form using 'date'
find -newermt "@$(date +%s -d '10 minutes ago')" ## short form using 'date' -- notice '@'
date -d
(和find -newermt
)参数非常灵活,但是文档晦涩难懂。这似乎是一个要点:Date input formats