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


当前回答

cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir

其他回答

正如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'通常对应于创建日期。

使用-atime、-ctime和-mtime开关进行查找,您可以接近您想要实现的目标。

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

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

首先创建一个带有特定日期/时间的文件。在本例中,午夜时的文件是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 ./ -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