我正在尝试读取文件中的行数以及该文件的最后修改日期(例如,如果最后修改日期为 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
为,或添加到) 。lstat
perl
-L
zstat
还,你忘记了变量周围的双引号并且您不应该用于echo
任意数据。