例如,MySQL服务器正在我的Ubuntu机器上运行。部分数据在过去24小时内发生了更改。

什么(Linux)脚本可以找到在过去24小时内被更改的文件?

请列出文件名称、文件大小和修改时间。


当前回答

这个命令对我很管用

find . -mtime -1 -print

其他回答

对于将来登陆这里的其他人(包括我自己),添加一个name选项来查找特定的文件类型,例如:find /var name "*.php" -mtime -1 -ls

查找某一特定目录及其子目录中在过去24小时内(最近一整天)被修改的所有文件:

find /directory_path -mtime -1 -ls

应该符合你的喜好

1之前的-很重要,它表示一天或更短时间前发生的任何变化。 在1之前的A +表示至少一天前发生了任何变化,而在1之前没有任何变化则意味着它是在一天前发生的变化,不多不少。

另一种更人性化的方法是使用-newermt选项,它可以理解人类可读的时间单位。

与-mtime选项不同的是,-mtime选项需要用户阅读查找文档来确定我们的时间单位,然后让用户将其时间单位转换成那些时间单位,这很容易出错,而且对用户不友好。在20世纪80年代,时光网几乎无法被接受,但在21世纪,时光网拥有石器时代工具的便利和安全。

相同时间的-newermt选项的示例,以不同的人性化单位表示:

find /<directory> -newermt "-24 hours" -ls
find /<directory> -newermt "1 day ago" -ls
find /<directory> -newermt "yesterday" -ls

你可以用

find . -mtime 0

从人类发现:

距离每个文件最后一次修改的时间除以24小时,剩余的时间将被丢弃。这意味着 如果匹配-mtime 0,则文件必须在过去24小时内进行过修改。

在gnu兼容系统(即Linux)上:

find . -mtime 0 -printf '%T+\t%s\t%p\n' 2>/dev/null | sort -r | more

这将列出在过去24小时内被修改过的文件和目录(-mtime 0)。它将以可排序和人类可读的格式(%T+)列出它们和最近修改的时间,后面是文件大小(%s),后面是完整的文件名(%p),每个文件之间用制表符分隔(\ T)。

2>/dev/null丢弃任何stderr输出,这样错误消息就不会搅浑水;Sort -r按最近修改的顺序对结果排序;| more每次只列出一页结果。