如何使用UNIX命令find
来搜索特定日期创建的文件?
Answer 1:
正如马克斯指出的那样,你可以没有,但是检查修改或访问的文件是不是所有的辛苦。 我写了一个教程关于这一点,迟至今日。 其实质是利用-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”通常对应于创建日期,但。
Answer 2:
find location -ctime time_period
TIME_PERIOD的例子:
30多天前:
-ctime +30
不到30天前:
-ctime -30
整整30天前:
-ctime 30
Answer 3:
这两个步骤,但我喜欢做这种方式:
首先创建一个特定的日期/时间的文件。 在这种情况下,该文件是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
Answer 4:
你可以这样做:
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
Answer 5:
你不能。 -c开关告诉你什么时候该权限上次修正,-a测试最近的访问时间和-m测试修改时间。 通过Linux操作系统(EXT3)的最香精使用的文件系统不支持“创建时间”的纪录。 抱歉!
Answer 6:
@Max:是说得对的创建时间。
但是,如果你要计算所经过的天争论的一个-atime
, -ctime
, -mtime
参数,你可以用下面的表达式
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
与任何你想要的日期和ELAPSED_DAYS将被设置为天,然后与当今的数字替换为“2008-09-24”。 (更新:减一的结果与校准find
的日期取整。)
因此,要找到修订于2008年9月24日的任何文件,命令为:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
这将工作,如果你的版本find
不支持-newerXY
在@Arve提到谓词:的答案。
Answer 7:
随着-atime,-ctime和-mtime交换机发现,你可以得到接近你想要达到的目标。
Answer 8:
cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir
Answer 9:
我发现这个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等参数将帮助你在这里。