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

时间:2020-03-06 14:58:47  来源:igfitidea点击:

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

解决方案

我们可以这样做:

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

我在删除所有超过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等参数将在这里为我们提供帮助。

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

查找位置-ctime time_period

time_period的示例:

  • 30多天前:-ctime + 30
  • 不到30天前:-ctime -30
  • 恰在30天前:-ctime 30

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

首先创建具有特定日期/时间的文件。在这种情况下,文件是午夜的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

你不能-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版本不支持@Arve:的答案中提到的-newerXY谓词,这将起作用。

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