【问题标题】:UNIX ls -l date format variesUNIX ls -l 日期格式不同
【发布时间】:2018-11-08 04:42:34
【问题描述】:

我使用的是 SunOS 5.10。我希望将“ls -l”的内容定向到可以读入数据库的文件中。但是时间格式会有所不同。下面是 ls -l 的输出示例。为什么文件 ls_txt.sh 和 nohup.out 有时间戳而不是年份?

-rw-rw-r--   1 gilmog   other         57 Jul 25  2017 fnd2.txt
-rw-rw-r--   1 gilmog   other        702 Jan 24  2018 handySh
-rw-rw-r--   1 gilmog   other        189 Nov  7 23:20 ls_txt.sh
-rw-------   1 gilmog   other       3915 Sep 12 03:58 nohup.out
-rw-rw-r--   1 gilmog   other       1655 Jan 24  2018 npiFn.sas  

【问题讨论】:

    标签: shell unix ls


    【解决方案1】:

    注意:不要解析ls 的输出。它的输出是为了人类消费,以了解文件系统的内容。如果您希望程序了解文件的时间信息,请使用stat1


    现在,我会回答你的问题。时间会有所不同,因为这就是它被定义为工作的方式。来自the POSIX documentation on ls

    该字段应包含文件最后一次修改的适当日期和时间戳。在 POSIX 语言环境中,该字段应等同于以下日期命令的输出:

    date "+%b %e %H:%M"

    如果文件在过去六个月内被修改过,或者:

    date "+%b %e %Y"

    (在 %e 和 %Y 之间使用两个字符)如果文件在过去六个月内没有被修改或修改日期在未来,除了在这两种情况下,最终产生的日期不应包括在内,并且输出应如同 date 命令是在文件的最后修改日期而不是当前时间执行的一样。当 LC_TIME 区域设置类别未设置为 POSIX 区域设置时,可以使用该字段的不同格式和呈现顺序。

    这个定义给程序解析造成了可怕的混乱。 所以,重申一下:不要解析 ls 输出。


    1 如果您的 Solaris 机器上没有 stat,那么您可能只需要依赖 ls。对不起。该命令大约是ls -siv -@ -/ c -%all z

    【讨论】:

    • 谢谢。我的机器上没有 stat,也没有权限在机器上安装任何东西。我需要获取所有文件的文件名、用户 ID、文件日期和大小值 - 我不确定还能使用什么。
    • 很遗憾,我目前无法访问 Solaris,但我会提供一些建议。 (1) man ls 看看它是否提供了一个选项来帮助您获得所需的时间。 (2)如果你能在电脑上写文件,你总是可以安装软件:下载GNU stat并编译它,例如/tmp。 (3) 使用perlpython或任何其他高级语言读取文件的mtime信息。
    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2015-02-05
    • 2011-04-16
    • 2012-01-03
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多