Inq*_*Kea 155 ls timestamps files
日期按什么顺序排列?当然不是字母数字顺序。
ls -lt
按修改时间排序。但我需要创作时间。
Gil*_*il' 123
大多数 unice 没有文件创建时间的概念。你不能ls
打印它,因为信息没有被记录。如果您需要创建时间,请使用版本控制系统:将创建时间定义为签入时间。
如果您的 Unix 变体有创建时间,请查看其文档。例如,在Mac OS X(我知道的唯一示例)上,使用ls -tU
. Windows 也存储创建时间,但它并不总是暴露给 unix 实用程序的端口,例如 Cygwinls
没有显示它的选项。该stat
实用程序可以显示创建时间,在 GNU 实用程序中称为“出生时间”,因此在 Cygwin 下,您可以显示按出生时间排序的文件stat -c '%W %n' * | sort -k1n
。
请注意,ctime ( ls -lc
)不是文件创建时间,而是inode更改时间。每当有关文件的任何内容(内容或元数据)发生更改时,都会更新 inode 更改时间,除非仅在读取文件时不更新 ctime(即使 atime 已更新)。特别是,ctime 总是比 mtime(文件内容修改时间)更近,除非 mtime 已明确设置为将来的日期。
Tot*_*tor 24
不幸的是,stat(2)
API 没有提供获取文件创建时间的方法,因为Unix 标准不需要它。
但是,某些文件系统(asext4
或XFS
)确实将此信息保存在文件元数据中。只是没有标准的方法来获得它,但有一种方法:
注意:此答案主要涵盖 Linux 系统。
ls
命令选项根据Stéphane Chazelas 的说法,ls
coreutils 8.32(和 glibc 2.28 和内核 4.11)的版本现在能够使用新的statx(2)
系统调用(见本答案结尾)来提取创建时间元数据。
因此,要列出按创建/出生日期/时间排序的文件,您可以使用:
ls -lt --time=birth
Run Code Online (Sandbox Code Playgroud)
该-t
选项将按选项指示的时间类型排序--time
(我怀疑 birth
可以根据需要更改creation
)。
添加-r
以反转排序顺序。
debugfs
对于extN
文件系统debugfs -R 'stat partition/relative/path/to/file' /dev/sda1
Run Code Online (Sandbox Code Playgroud)
你会得到类似的东西提crtime
(不 ctime
!)如果你使用ext4
。
ctime: 0x513a50e5:d4e448f0 -- Fri Mar 8 21:58:13 2013
atime: 0x513dd8f1:04df0b20 -- Mon Mar 11 14:15:29 2013
mtime: 0x513a50e5:d4e448f0 -- Fri Mar 8 21:58:13 2013
crtime: 0x513a259a:35191a3c -- Fri Mar 8 18:53:30 2013
Run Code Online (Sandbox Code Playgroud)
此命令可能需要一些时间才能返回,可能是因为它还列出了与文件相关的每个范围。
现在,如果您想按创建日期对文件进行排序,我想这并不容易(也不正确)。正如吉尔斯所说,如果您使用版本控制系统可能会更容易。但是您可以尝试查看ext4
API ...
stat
命令(2021更新)我在(最近的)Ubuntu 系统stat -c '%w' myfile
上的ext4
文件系统上尝试了该命令,但没有成功(它只是回答-
)。
2021 年更新:根据Thomas Nyman 的说法,如果您至少拥有 coreutils 8.31、glibc 2.28 和 kernel 4.11,则上述命令适用于 Linux。尽管您可以尝试,但它本身不会对文件进行排序:
stat -c '%w %n' * | sort -n
Run Code Online (Sandbox Code Playgroud)
实现这一目标。使用%W
,如果你不关心人类可读的日期。添加-r
选项sort
以反转顺序。
2020 年更新:自 Linux内核 4.11以来,引入了新的statx(2)
系统调用。如果信息在文件系统上可用,它的 API 可以访问文件创建时间。据我所知,目前还没有标准/稳定的用户空间实用程序允许我们获取此信息,但它可能会在一段时间内出现。这不是一个标准的POSIX接口,虽然,但一个Linux特有的,说的:man
statx() 在内核 4.11 中被添加到 Linux 中;在 glibc 2.28 中添加了库支持。
statx() 是 Linux 特有的。
在运行内核 4.11 或更高版本、glibc 2.28 或更高版本以及coreutils 8.31 或更高版本的Linux 系统上,stat
可以在存储文件的文件系统上显示文件的出生时间。ls -l
可以得到类似于 的输出
stat -c "%A %4h %U %G %10s %.16w %n" -- *
Run Code Online (Sandbox Code Playgroud)
和排序输出(假设没有带换行符的文件名)
stat -c "%.10W %A %4h %U %G %10s %.16w %n" -- * |
sort -k1,1n |
cut -d' ' -f2-
Run Code Online (Sandbox Code Playgroud)
使用coreutils 8.32 或更高版本,ls
可以使用出生时间显示和排序,使用 --time=birth
选项:
ls -l --time=birth
Run Code Online (Sandbox Code Playgroud)
stat
上面的调用使用这些格式选项:
%.10W
: 出生时间,自 Unix 纪元以来的秒数(带有 10 位小数部分)。%A
:文件类型和权限,ls -l
格式%4h
: 文件的硬链接数,对齐到四个字符%U
: 拥有用户的名称%G
: 所属组的名称%10s
: 文件大小,对齐到十个字符%.16w
:出生时间,以人类可读的格式,截断为 16 个字符(足以显示年、月、日、小时、分钟和秒)%n
: 文件名[编辑]
使用此命令ls -lct
按ctime
(最后修改文件状态信息的时间)对文件进行排序。