如何使用“查找”search在特定date创build的文件?

如何使用UNIX命令find来search在特定date创build的文件?

正如Max所指出的,你不能,但是检查修改或访问的文件并不是那么困难。 我写了一篇关于这个的教程 ,直到今天。 其实质是使用-newerXY! -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'通常对应于创builddate。

find location -ctime time_period

time_period的例子:

  • 30多天前: -ctime +30

  • 不到30天前: -ctime -30

  • 正好30天前: -ctime 30

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

首先创build一个具有特定date/时间的文件。 在这种情况下,该文件是在2008年10月1日午夜

 touch -t 0810010000 /tmp/t 

现在,我们可以find所有比上述文件更新或更旧的文件(通过文件修改date,也可以使用-anewer访问,更改了更新文件状态)。

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

您也可以通过触摸创build两个文件来查看特定date之间的文件

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

这将在两个date和时间之间find文件

 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 

你不能。 -c开关告诉你什么时候权限是最后更改的,-atesting最近的访问时间,-mtesting修改时间。 大多数Linux(ext3)所使用的文件系统不支持“创build时间”logging。 抱歉!

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

但是,如果要计算-atime-ctime-mtime参数之一的经过天数参数,则可以使用以下expression式

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

将“2008-09-24”replace为您想要的任何date,并将ELAPSED_DAYS设置为当天至今天之间的天数。 (更新:从结果中减去一个,以便与find的date舍入alignment。)

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

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

如果你的find版本不支持@Arve:的答案中提到的-newerXY谓词,这将会起作用。

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

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

我在脚本中find了这个脚本,删除了所有超过14天的文件:

 CNT=0 for i in $(find -type f -ctime +14); do ((CNT = CNT + 1)) echo -n "." >> $PROGRESS rm -f $i done echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG 

我觉得有一点额外的“人发现”,并寻找-ctime / -atime等参数将帮助你在这里。