代码之家  ›  专栏  ›  技术社区  ›  RikSaunderson

在bash中按创建时间对文件进行毫秒排序

  •  5
  • RikSaunderson  · 技术社区  · 14 年前

    我需要创建一个位于硬盘上的文件列表,按照文件到达硬盘的时间顺序排列。为此,我使用了以下方法:

    ls -lat
    

    它以日期/时间顺序列出所有文件,但是它只将它们排序到最近的秒。这里的问题是有成千上万的文件,每一次,其中的一些文件在同一秒钟内聚集在一起。我需要 准确的 正确的顺序。我猜最简单的方法是把创造时间缩短到毫秒(或者纳米)。为此,我尝试使用以下方法:

    stat $myfile
    

    查看修改时间,但它始终显示小时:分钟:秒.00000000000。

    有办法吗? 谢谢, 里克

    3 回复  |  直到 12 年前
        1
  •  3
  •   Holstebroe    14 年前

    精度取决于您所使用的文件系统,但即使使用高精度的文件系统(如ext4),stat的标准实现也会使用具有1秒分辨率的time_t。

    如果您有权访问吐出所有这些文件的程序源,请尝试将时间戳设置为文件名的一部分,然后根据文件名而不是修改时间排序。

        2
  •  2
  •   KevinDTimm    14 年前

    您可能需要编写自己的stat命令,使用 stat(2) 功能

        3
  •  2
  •   poundifdef    14 年前

    我不确定这是可能的。我的理由是:

    如果你看 stat() 函数调用,您会看到它返回一个包含文件信息的结构。其成员之一是:

    time_t    st_mtime;   /* time of last modification */
    

    如果你看看时间结构, wikipedia says this :

    符合Unix和POSIX的系统 将时间实现为整数或 真正的浮动类型(通常为 32位或64位整数),其中 表示此后的秒数 Unix时代的开始…

    这意味着stat()的时间是以秒为单位的,而不是以毫秒为单位的。我还没有研究过每个inode如何存储文件信息,但它可能存储的信息不到毫秒。

    另一种选择可能是在创建文件名时将mill/microsecond值附加到文件名本身,然后以这种方式对其进行排序?