如何查找文件系统上最近创建的文件?

如何查找文件系统上最近创建的文件?

我试图通过检测静默安装程序创建的最后一个文件是否存在来跟踪静默安装程序的完成情况,但为了做到这一点,我需要找出是哪个文件。有什么办法可以做到这一点吗?我找到了很多关于如何找到最近的答案修改的文件,但这并不有效,因为其中许多文件是由原始创建者修改的,其顺序与安装程序添加到系统的顺序不同。

答案1

同意变更时间(又名时间)是可以在 *nix 文件系统上观察到的最可移植的功能,OP 可能需要更多详细信息。

POSIX<sys/stat.h>记录文件系统上每个文件、目录、设备的三个时间戳:使用权,修改改变了。前两个可以设置为任意值utimes(虽然标记为扩展但广泛可用),但最后一个不能。作为许多系统调用(包括utimes.很可能它最常由 更新chmod,但移动或重命名文件也可以执行此操作。

但是,如果您碰巧正在寻找有关文件创建时间的线索,时间这是您可能找到的最好的线索。访问时间也很有用,但可以配置某些文件系统来避免更新它。首先看时间

find程序(也记录在 POSIX 中)包含一个使用选项时间:

-ctime n
如果从初始化时间中减去文件状态信息的最后一次更改的时间除以 86400(丢弃任何余数),则主设备应评估为 truen

86400一天中的秒数;n是一个整数(天数)。一些实现find提供了更小的单元,但 POSIX 中没有这些。

您可以像这样使用它来获取过去一天内更改的文件列表:

find . -ctime -1 -print

某些实现可能允许非整数值n,但 POSIX 在这里是明确的:

在描述中,无论在哪里n被用作主要参数,它应被解释为十进制整数前面可以选择加号 ( '+' ) 或减号 ( '-' )

因此不可能在这个方向上有一个符合 POSIX 标准的扩展。其他实现可以提供替代选项,其(例如)将时间差指定为分钟数。您应该查阅您正在使用的系统的手册find,看看这是否适用于您。

其中一条评论提到了一些带有扩展名(也称为非标准)的文件系统来获取实际的文件创建时间。多年来,各种系统都出现过这种情况,包括

有更相关的讨论如何在 Linux 中获取文件创建日期?,其中提到了结构st_birthtime的成员stat。这在两个 OSX 的手册页中都有记录stat(2)和 FreeBSDstat(2),以及特定于系统的 FreeBSDstat(1)和操作系统stat(1)公用事业。 (NetBSD 还文件这个扩展)。简称为现代 BSD 系统的一个功能。

相应的find实用程序也支持该扩展(例如,参见 OSX查找(1)):

全部-B* 出生时间相关的主要是 IEEE Std 1003.1-2001 (``POSIX.1'') 的扩展。

其他系统没有这个扩展。供讨论:

相关内容