日期/时间规范中的字符无效

时间:2014-12-09 07:58:31

标签: shell unix awk scripting aix

示例代码:

modified_time=`ls -lt core* | head -1 | awk '{print $6,$7,$8}'`
echo modified time = $modified_time

我试图在aix框的下面命令的帮助下,在几秒钟内转换文件的最后修改时间

t2=`date +'%s' -d "$modified_time"`
echo t2 = $t2

注意:我发布的代码正在使用bash上的cygwin。但它在AIX上给出错误(ksh)。 我收到以下错误:

egdev04{stc}[/home/stc]% t2=`date +'%s' -d "$modified_time"`

Invalid character in date/time specification.
Usage: date [-u] [+Field Descriptors]

有人可以让我知道代码的哪一部分是错的,并建议需要使用的代码。

1 个答案:

答案 0 :(得分:1)

不幸的是,date(1)实际上很难被标准所覆盖,尤其是在过时的系统上,例如AIX(没有双关语)。

即使在现代GNU / Linux vs BSD系统上,也有不同的键来实现您尝试调用的行为:

  • GNU日期有一个关键:

    -d, --date=STRING
            display time described by STRING, not 'now'
    
  • BSD日期将使用两个密钥和特殊调用:

    date [-jnRu] -f input_fmt new_date  [+output_fmt]
    
    -j       Do not try to set the date.  This allows you to use the -f flag
             in addition to the + option to convert one date format to
             another.
    -f       Use input_fmt as the format string to parse the new_date provided
             rather than using the default [[[[[cc]yy]mm]dd]HH]MM[.ss] format.
             Parsing is done using strptime(3).
    

AIX似乎没有包含这些设施中的任何一个。所以,最终,如果你真的需要,你必须用某种脚本语言执行微脚本,比如Perl / Ruby / Python /等。

向后退一步,解析ls(1)的结果总是一个非常糟糕的主意,因为它们往往根据特定的操作系统实现,语言环境,输出格式和人类可读的#34;而变化很大。如果您真的只想获得一些文件修改时间,为什么不使用stat(1)?可能它在AIX上可用吗?像

这样的东西
stat -c '%Y' "$file"

似乎解决了你的任务。