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
(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 '{}'
9条答案
按热度按时间zazmityj1#
您可以找到在最后一天创建/修改的每个文件,使用以下示例:
要查找上周的所有内容,请根据需要使用“1周前”或“7天前”
wqnecbli2#
也许有人可以使用它。递归地找到在某个时间段内修改过的所有文件,只需运行:
包括第一个日期,不包括第二个日期,因此类似于
始终返回
0
nwlqm0z13#
这有点绕路,因为
touch
不接受原始的time_t
值,但它应该在脚本中非常安全地完成这项工作。(date
的-r
选项在MacOSX中存在;我没有仔细检查GNU。)通过直接在touch
命令行中编写命令替换,可以避免'time'变量。bjg7j2ky4#
假设
find -newermt
是一个现代版本,它的功能非常强大:或者,如果要指定
time_t
(自epoch以来的秒数):作为参考,
-newermt
未直接列在find的手册页中。相反,它显示为-newerXY
,其中XY
是mt
的占位符。其他替换是法律的的,但不适用于此解决方案。从
man find -newerXY
开始:时间规范被解释为GNU date的-d选项的参数。
因此,以下内容等同于初始示例:
date -d
(和find -newermt
)参数非常灵活,但是文档很模糊,下面是一个看起来很中肯的源代码:Date input formatspqwbnv8z5#
给定
1494500000
的unix时间戳(自纪元以来的秒数),执行以下操作:要在这些文件中查找“foo”:
gdx19jrr6#
也可以在没有标记文件的情况下执行此操作。
到日期的%s格式是自纪元以来的秒数。find的-mmin标志采用以分钟为单位的参数,因此将以秒为单位的差值除以60。age前面的“-”表示查找上次修改时间小于age的文件。
对于更新版本的gnu find,您可以使用-newermt,这使得它变得微不足道。
pxiryf3j7#
PowerShell available on Linux已经存在一段时间了,所以我建议使用它,因为它不仅处理纯文本,而且处理真实的对象,因此避免了格式化,使任务更容易
8zzbczxx8#
这是另一种方法,你可以使用
touch -d
和find /dir -newer
命令递归地查找比给定时间戳更新的文件。例如,如果您需要查找“1 June 2018 11:02”之后的文件,则可以使用此创建日期创建文件。
然后,您可以使用文件时间戳作为
find
命令中的参考。djp7away9#
于是又有了另一种方式(而且在某种程度上是便携式的--