获取大量文件的创建和最后修改时间的最快方法

获取大量文件的创建和最后修改时间的最快方法

鉴于

  • 目录
  • sh 模式直接在此目录中生成文件子集(如 *.log)
  • sh 模式可以根据文件名

获取按模式过滤的每个文件的最快方法是什么(在 ksh 中):

  • 其名称
  • 最后修改的日期和时间(即附加的文本)
  • 创建日期和时间(假设它是在我们访问它的目录中创建的)

理想情况下,它可以同时在以下两个方面发挥作用:

  • AIX 6100-04-03-1009
  • Linux 2.6.18
  • SunOS 5.10

答案1

Posix文件系统节点通常具有三个时间属性:

  • atime(访问时间)——文件上次读取的时间
  • mtime(修改时间)——上次写入时间。
  • ctime(更改时间)——其 inode(元数据)何时发生更改。

ctime属性经常被误解为创建时间,有时确实如此,这往往会使人们感到困惑。

POSIX shell 没有提取这三个属性的标准方法,您将依赖命令lsls -l $file默认情况下显示修改时间。

  • ls -lc $file节目ctime
  • ls -lu $file节目atime

ls --time-style=full-iso如果您使用的是 GNU/linux 系统,建议使用或其他 iso 格式以获得一致的输出。

在 Perl 和其他脚本语言中,stat()文件并访问其属性。Perl 甚至有-M、、-A-C运算符,它们为文件系统对象返回mtime、、atimectime。不过请注意时间偏移。Perl 倾向于报告相对于进程启动时间的时间。

答案2

抱歉没有为您编写 awk/sed,但该stat命令将提供访问、修改和更改的时间。它将为您匹配。我不确定它是否在 AIX 中有效,我目前无法访问它。

答案3

这可能是 GNU 扩展,但 GNU find 对所有 3 个时间都有 printf 格式,不包括“出生”时间。(这需要 Linuxstatx系统调用;当前版本的 coreutilsstat可以获取所有 4 个时间)。

find -printf '%a \t%c \t%t  \t%f\n'

将打印所有 3 次,例如

Tue Dec  8 07:49:12.3585942200 2020     Tue Dec  8 07:49:27.9582201460 2020     Tue Dec  8 07:49:27.9582201460 2020     ./foo.c

您可以使用%Ak(其中 k 是格式说明符,与 ctime 和 mtime 相同)以不同的格式打印。请参阅Linux 手册页

https://www.unix.com/man-page/posix/1p/find/-printf根本没有提到,所以您可能需要perl其他非 POSIX 工具。

相关内容