Linux命令检查文件系统中的新文件

25

我们有一台Linux机器,想要检查在某个日期范围内新增了哪些文件。

我只能通过SSH连接到该机器,它运行的是openSUSE 11.1。

是否有某种命令可以给我列出在2011年4月5日至2011年5月5日之间已添加到文件系统中的文件列表?

谢谢。

此致 Gabriel

4个回答

47

有很多方法可以做到这一点。

第一个方法:

start_date=201105040000

end_date=201105042359

touch -t ${start_date} start

touch -t ${end_date} end

find /you/path -type f -name '*you*pattern*' -newer start ! -newer end -exec ls -s {} \;

第二个方法:查找在20到21天之间修改的文件:

find -ctime +20 -ctime -21

查找在2500到2800分钟之前修改的文件:

find -cmin +2500 -cmin -2800

还可以阅读这个主题


1
注意:ctime涉及文件状态,mtime涉及文件内容/数据。 - James C
感谢您的回答。幸运的是,这些文件自那时以来只被添加和未修改。因此,find find -cmin +1080 -cmin -1500 给了我想要的结果。请问有没有办法输出它们被修改的日期/时间? - Gabriel Spiteri
4
我认为重要的是明确这个答案也会返回在您选择的时间范围内修改过但远在该时间之前就已添加的文件。因此您需要小心。 - jedwards

3

好的,您可以使用find来获取在某个时间窗口内最后一次修改的所有文件的列表,但这并不是您想要的。我认为您无法仅从文件的元数据中得知它何时被创建。

编辑:要将文件及其修改日期列出,请将find的输出通过管道传递到xargs,以便在所有文件上运行ls -l,这将显示修改时间。

find /somepath -type f ... -print0 | xargs -0 -- ls -l

在我的情况下,我确信最后修改时间 = 创建日期,因为我确定文件没有被修改。我使用了"find -cmin +1000 -cmin -1500"命令,并给出了文件列表 :) ...... 是否有机会输出修改的日期/时间? - Gabriel Spiteri
我会编辑我的回答以展示如何列出修改日期。 - Ryan C. Thompson
太棒了伙计...非常感谢。以防其他人阅读此内容,最终命令为:find /mypath -type f -cmin +1000 -cmin -1500 -print0 | xargs -0 -- ls -lcode - Gabriel Spiteri
我认为重要的是要明确,这个答案也会返回在您时间范围内已经修改但在此之前添加的文件。因此,您应该小心谨慎。 - jedwards
jedwards,阅读第一条评论。原帖作者可以保证对于他的文件,修改时间就是创建时间。 - Ryan C. Thompson

1

我误解了你的问题。根据你使用的文件系统,它可能会或可能不会存储创建时间。

我的理解是,ext2/3/4 不存储创建时间,但修改时间、更改时间(状态略有不同)和访问时间是存储的。

另一方面,Fat32 包含创建时间戳,如果我没记错的话。

如果你正在使用 ext 文件系统,似乎有两个选择:

1.接受在两个日期之间修改的所有文件(这将包括已创建的文件,但也包括刚编辑的文件)。你可以使用 find 来完成此操作。

2.创建一个脚本/定时任务,以某个间隔记录你的文件系统内容,例如:

find / > filesystem.$(date +%s).log

然后运行差异以查看添加了什么。当然,这将防止您向时间回溯到开始制作这些日志之前。


1
您可以尝试以下之一:

find -newerct "1 Aug 2013" ! -newerct "1 Sep 2013" -ls

find . -mtime $(date +%s -d"Jan 1, 2013 23:59:59") -mtime $(date +%s -d"Jan 2, 2016 23:59:59")

find /media/WD/backup/osool/olddata/ -newermt 20120101T1200 -not -newermt 20130101T1400

find . -mtime +1 -mtime -3
find . -mtime +1 -mtime -3 > files_from_yesterday.txt 2>&1
find . -mtime +1 -mtime -3 -ls > files_from_yesterday.txt 2>&1

touch -t 200506011200 first
touch -t 200507121200 last
find / -newer first ! -newer last

#!/bin/bash
for i in `find Your_Mail_Dir/ -newermt "2011-01-01" ! -newermt "2011-12-31"`; do
    mv $i /moved_emails_dir/

希望这有所帮助。

3
请提供代码的解释。 - Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接