如何使用UNIX命令find
搜索在特定日期创建的文件?
如何使用UNIX命令find
搜索在特定日期创建的文件?
Answers:
正如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”通常对应于创建日期。
-newerBt
上,文件的诞生(创建)时间将匹配。
-newerxt
提供)开始在FreeBSD上可用,另外一些BSD和GNU find(自2007年4.3.3起)基于HP / UX find引入了,但是不支持Y == t)。-newerXY
find location -ctime time_period
time_period的示例:
30多天前: -ctime +30
不到30天前: -ctime -30
恰好30天前: -ctime 30
ctime
与创建时间无关,它是inode更改时间。
这是两个步骤,但是我喜欢这样:
首先创建具有特定日期/时间的文件。在这种情况下,文件是午夜的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
find
缺乏的老年人-newerXY
您可以这样做:
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
你不能 -c开关告诉您上次更改权限的时间,-a测试最近的访问时间,-m测试修改时间。大多数Linux(ext3)版本使用的文件系统不支持“创建时间”记录。抱歉!
@Max:关于创建时间是正确的。
但是,如果你要计算所经过的天论据的一个-atime
,-ctime
,-mtime
参数,你可以用下面的表达式
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
将“ 2008-09-24”替换为您想要的任何日期,并将ELAPSED_DAYS设置为从那时到今天之间的天数。(更新:从结果中减去1以与find
的日期舍入。)
因此,要查找在2008年9月24日修改的任何文件,该命令将为:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
如果您的的版本find
不支持-newerXY
@Arve:的答案中提到的谓词,这将起作用。