如何使用UNIX命令find搜索在特定日期创建的文件?
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
我认为一点额外的“man find”和查找-ctime / -atime等参数将对您有帮助。
使用-atime、-ctime和-mtime开关进行查找,您可以接近您想要实现的目标。
使用此命令搜索/home/上的文件和文件夹,根据您的需要添加一个时间段:
/home/
find /home/ -ctime time_period
time_period的示例:
More than 30 days ago: -ctime +30
-ctime +30
Less than 30 days ago: -ctime -30
-ctime -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参数之一的天数参数,你可以使用下面的表达式
-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谓词,这将有效。
-newerXY
正如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'通常对应于创建日期。
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir