为什么“ls -all”显示某些文件的时间,而其他文件仅显示年份?

为什么“ls -all”显示某些文件的时间,而其他文件仅显示年份?

如果发出该ls -all命令,某些文件将显示时间戳,其中包含年份但不包含时间,而其他文件则显示时间戳包含时间但不包含年份。为什么会发生这种情况?时间戳是否代表文件创建的时间?

在此输入图像描述

答案1

默认情况下,文件时间戳以缩写形式列出,使用“Mar 30 2002”等日期表示非最近时间戳,使用不带年份和时间的日期(如“Mar 30 23:45”)表示最近时间戳。此格式可能会根据当前区域设置而变化,如下所述。

如果时间戳小于六个月,则被认为是最近的,并且不是未来的日期。如果今天的时间戳没有以最近的形式列出,则该时间戳是将来的,这意味着您可能存在时钟偏差问题,这可能会破坏依赖文件时间戳的程序(例如 make)。

来源:http://www.gnu.org/software/coreutils/manual/coreutils.html#Formatting-file-timestamps

为了显示:

$ for i in {1..7}; do touch -d "$i months ago" file$i; done
$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Sep 21 02:38 file1
-rw-r--r-- 1 terdon terdon 0 Aug 21 02:38 file2
-rw-r--r-- 1 terdon terdon 0 Jul 21 02:38 file3
-rw-r--r-- 1 terdon terdon 0 Jun 21 02:38 file4
-rw-r--r-- 1 terdon terdon 0 May 21 02:38 file5
-rw-r--r-- 1 terdon terdon 0 Apr 21  2015 file6
-rw-r--r-- 1 terdon terdon 0 Mar 21  2015 file7

答案2

所代表的时间就是修改时间。请注意, 与ls -all是同一件事ls -l -a, 与 是不同的ls --all。没有理由l在您的示例中使用 double 。如果你想查看每个文件的修改时间,可以使用ls -al --full-time.

答案3

如果尝试显示的日期/时间是过去六个月内的,则 ls显示日期和时间。如果时间早于六个月,或者是未来时间,则ls显示日期和年份。

正如其他答案中所说,

  • ls -ll相当于ls -l, 并且
  • ls -all相当于ls -al, 相当于ls -a -l, ls -l -a, 和ls -la

使用该-l选项,ls显示文件的修改日期/时间(包括目录,因为“一切都是文件”),除非

  • -c还指定了,在这种情况下它显示更改时间,或者
  • -u还指定了,在这种情况下它显示访问时间。

LS(1)了解更多信息。

答案4

为了获得旧文件的全职时间,我个人使用:

alias ls='ls --time-style=long-iso -Altr'

所以我本地没有这样的问题。然而,使用 ftp 仍然存在问题。我正在使用 lftp 的镜像选项将旧照片上传到我的网站,有些照片已上传,但它们没有更改,时间戳也没有更改。我试图弄清楚这是否是时区冲突,但我不能,因为默认情况下不显示文件时间,并且 ftp 服务器不接受 ls 选项“--time-style=long-iso”。

相关内容