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


当前回答

@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谓词,这将有效。

其他回答

你可以这样做:

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

@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谓词,这将有效。

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

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

我在一个删除所有超过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

我认为一点额外的“man find”和查找-ctime / -atime等参数将对您有帮助。

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