ls -l
仅显示文件的修改时间戳(最多秒)。如果两个文件在秒内具有相同的时间戳,但不完全同时修改,则将ls -lt
按照准确的 mtime 的顺序或仅在秒内的近似 mtime 的顺序对文件进行排序(因此文件之间的顺序可以是随意的)?
答案1
这在很大程度上取决于ls
实施情况。其中 4 个在 GNU/Linux 系统上找到:
$ touch a; touch c; touch b; stat -c %y a c b
2018-01-10 12:52:21.367640342 +0000
2018-01-10 12:52:21.371640148 +0000
2018-01-10 12:52:21.375639952 +0000
GNU
ls
,来自 GNU 项目的一个(来自 GNU核心工具收藏)。这是在 Debian(Linux 或 kFreeBSD 内核)、Cygwin 或 Fedora 等 GNU 系统上常见的一种。$ gnu-ls -rt a c b
ls
的从传家宝工具箱,OpenSolaris 工具的一个端口:$ heirloom-ls -rt a b c
来自
ls
AT&T 开源集合,可能是内置的ksh93
。另一种有很多奇特的扩展:$ ast-ls -rt a c b $ PATH=/opt/ast/bin:$PATH ksh93 -c 'type ls; ls -rt' ls is a shell builtin version of /opt/ast/bin/ls a c b
busybox(在大多数(通常是嵌入式)基于 Linux 的系统上找到的(或衍生版本)):
$ busybox ls -rt c b a
因此,其中,GNU 和 astls
考虑第二部分的小数部分。其他的则退回到对同一秒内最后修改的文件进行词法比较。只有 busyboxls
尊重-r
那里。
在我的测试中,FreeBSDls
还支持亚秒级精度(前提是它们在 VFS 级别启用,请参阅vfs.timestamp_precision
sysctl)。
zsh
的 glob(使用om
glob 限定符在修改时间进行排序,Om
用于相反顺序)也占用完整时间:
$ echo *(Om)
a c b
答案2
对于 GNU 的ls
实现,运行时ls -l
将按字母顺序对文件进行排序,并将ls -lt
按修改时间的顺序对文件进行排序,最新的在前,以底层文件系统支持的最高精度。您可以使用该--full-time
选项进行检查。
因此,要回答您的问题,是的,它可以最大程度地扩展,但前提是您使用-t
(否则,它将默认为字母顺序),并且正在使用支持它的实现(请参阅
史蒂芬的回答更多细节)。例如,ext4
如果有足够大的索引节点来存储所需的时间戳数据,则可以支持纳秒精度。
答案3
您可以检查是否比较输出
ls -lat
和
ls -lat --full-time
排序没有任何随意性。
答案4
是的,它会。
为了测试,创建两个时间差很小的文件:
$ touch aa; sleep 0.2; touch bb
检查修改时间:
$ stat -c %y bb aa
2018-01-07 20:51:19.364248042 0000
2018-01-07 20:51:19.072248226 0000
该列表将使用这样的差异:
$ ls -lt aa bb
-rw-r--r-- 1 user user 0 Jan 7 20:51 bb
-rw-r--r-- 1 user user 0 Jan 7 20:51 aa
有了--full-time
差异就会一目了然。
$ ls -lt --full-time aa bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.364248042 0000 bb
-rw-r--r-- 1 user user 0 2018-01-07 20:51:19.072248226 0000 aa