将上次修改日期输出到另一个文件?

将上次修改日期输出到另一个文件?

我正在尝试读取文件中的行数以及该文件的最后修改日期(例如,如果最后修改日期为 2013 年 1 月 18 日,则应输出2013-01-18),然后将数据附加到给定的输入文件中形式theFile: 4 lines, modified on 2013-01-18。在使用 echo 输出之前,我尝试将这两条数据存储在它们自己的变量中。

#!/bin/sh
totLines=$(wc -l < $1)
modDate=$(date -r $1)
echo $1: $totLines "lines, modified on" $modDate >> $1

我查找最后修改日期的方法正确吗?有人告诉我是这样,但我不明白为什么,因为我找不到任何关于它的信息date -r,而且我无法让它在我尝试的任何脚本中工作。还有使用 stat,但我也无法在stat -c %y $1我得到的地方使用它stat: illegal option -- c

答案1

两者都是 GNUdate -r特有stat的。也许 Linux 用户告诉他们你正在使用另一个系统。

不幸的是,没有标准命令可以可靠地获取该信息。您可以获得的最便携的是:

modDate=$(perl -MPOSIX -le '@s=stat shift or die$!;
  print strftime "%Y-%m-%d", localtime $s[9]' -- "$1") || exit

zsh有自己的内置stat命令:

zmodload zsh/stat
zstat -F %F +mtime -- "$1"

(上面的两个命令,对于符号链接,将返回符号链接目标的修改时间,就像 GNU 一样date -r,如果您想要符号链接的时间(就像在 GNUstat命令中一样),请在解决方案中更改stat为,或添加到) 。lstatperl-Lzstat

还,你忘记了变量周围的双引号并且您不应该用于echo任意数据。

相关内容