当前位置:  开发笔记 > 编程语言 > 正文

如何使用"查找"来搜索在特定日期创建的文件?

如何解决《如何使用"查找"来搜索在特定日期创建的文件?》经验,为你挑选了6个好方法。

如何使用UNIX命令find搜索在特定日期创建的文件?



1> 小智..:

正如Max指出的那样,你不能,但检查修改或访问的文件并不是那么难.我写了一篇关于这个的教程,直到今天.其实质是使用-newerXY! -newerXY:

示例:要查找2007年6月7日修改的所有文件:

$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08

要查找2008年9月29日访问的所有文件:

$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30

或者,在同一天更改了权限的文件:

$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30

如果您不更改文件的权限,"c"通常会对应于创建日期.


我的find版本(GNU 4.2.32)似乎不支持-newerXY谓词.是否需要特定的最低版本?或者是使用特殊配置开关编译查找的情况?
请注意,自2001年以来,[-newerxt]在[FreeBSD](http://svnweb.freebsd.org/base?view=revision&revision=76250)上可用(首次提供[作为补丁](http:// markmail.org/thread/mvofenww57bai3vk)1998年),其他一些BSD和GNU发现(自2007年4.3.3以来),基于HP/UX find,引入了`-newerXY`(但其中Y == t不是支持的).

2> Chris..:

find location -ctime time_period

time_period的示例:

超过30天前: -ctime +30

不到30天前: -ctime -30

正是30天前: -ctime 30


`ctime`与_creation time_无关,它是inode更改时间.
问题是我想测试特定日期,而不是在一段时间内.

3> Mark Biek..:

这是两步,但我喜欢这样做:

首先创建一个具有特定日期/时间的文件.在这种情况下,文件是在午夜的2008-10-01

touch -t 0810010000 /tmp/t

现在我们可以找到比上述文件更新或更旧的所有文件(按文件修改日期.您还可以使用-anewer访问和更改-cnewer文件状态).

find / -newer /tmp/t
find / -not -newer /tmp/t

您还可以通过触摸创建两个文件来查看特定日期之间的文件

touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2

这将在两个日期和时间之间找到文件

find / -newer /tmp/t1 -and -not -newer /tmp/t2


+1解决了缺少`-newerXY`的旧`find`的问题

4> 小智..:

你可以这样做:

find ./ -type f -ls |grep '10 Sep'

例:

[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24


如果grep搜索词位于文件名中,则会产生副作用.
这可能无法在一个目录中拥有几百万个文件.

5> Max Cantor..:

你不能.-c开关告诉您上次更改权限的时间,-a测试最近的访问时间,-m测试修改时间.大多数Linux(ext3)使用的文件系统不支持"创建时间"记录.抱歉!


事实上,它不仅仅是文件系统类型 - 即使文件系统拥有它,也没有用于获取此类信息的系统接口.Unix的缺点之一可以追溯到早期,这就是Unix永远不会起飞的原因.

6> yukondude..:

@Max:关于创作时间是正确的.

但是,如果你要计算所经过的天论据的一个-atime,-ctime,-mtime参数,你可以用下面的表达式

ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

将"2008-09-24"替换为您想要的任何日期,并将ELAPSED_DAYS设置为当时和今天之间的天数.(更新:从结果中减去一个以与find日期舍入对齐.)

因此,要查找2008年9月24日修改的任何文件,该命令将为:

find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))

如果您的版本find不支持-newerXY@Arve:'答案中提到的谓词,这将有效.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有