我们有一台Linux机器,想要检查在某个日期范围内新增了哪些文件。
我只能通过SSH连接到该机器,它运行的是openSUSE 11.1。
是否有某种命令可以给我列出在2011年4月5日至2011年5月5日之间已添加到文件系统中的文件列表?
谢谢。
此致 Gabriel
我们有一台Linux机器,想要检查在某个日期范围内新增了哪些文件。
我只能通过SSH连接到该机器,它运行的是openSUSE 11.1。
是否有某种命令可以给我列出在2011年4月5日至2011年5月5日之间已添加到文件系统中的文件列表?
谢谢。
此致 Gabriel
有很多方法可以做到这一点。
第一个方法:
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
还可以阅读这个主题。
好的,您可以使用find
来获取在某个时间窗口内最后一次修改的所有文件的列表,但这并不是您想要的。我认为您无法仅从文件的元数据中得知它何时被创建。
编辑:要将文件及其修改日期列出,请将find
的输出通过管道传递到xargs
,以便在所有文件上运行ls -l
,这将显示修改时间。
find /somepath -type f ... -print0 | xargs -0 -- ls -l
code
- Gabriel Spiteri我误解了你的问题。根据你使用的文件系统,它可能会或可能不会存储创建时间。
我的理解是,ext2/3/4 不存储创建时间,但修改时间、更改时间(状态略有不同)和访问时间是存储的。
另一方面,Fat32 包含创建时间戳,如果我没记错的话。
如果你正在使用 ext 文件系统,似乎有两个选择:
1.接受在两个日期之间修改的所有文件(这将包括已创建的文件,但也包括刚编辑的文件)。你可以使用 find 来完成此操作。
2.创建一个脚本/定时任务,以某个间隔记录你的文件系统内容,例如:
find / > filesystem.$(date +%s).log
然后运行差异以查看添加了什么。当然,这将防止您向时间回溯到开始制作这些日志之前。
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/
ctime
涉及文件状态,mtime
涉及文件内容/数据。 - James C