我怎么使用的UNIX命令 find 搜索文件上创建一个特定日期吗?

有帮助吗?

解决方案

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

其他提示

find location -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

你可以这样做:

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都将设置为当时和今天之间的天数。 (更新:从结果中减去一个以与 find 的日期舍入对齐。)

因此,要查找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

我在脚本中发现了这个scriplet,删除了超过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等参数将帮助您。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top