Вывод последней даты изменения в другой файл?

Я пытаюсь прочитать количество строк в файле и дату последнего изменения этого файла (например, если последний раз был изменен 18 января 2013 года, он должен выводить 2013-01-18 ), а затем добавлять данные к заданный входной файл в виде theFile: 4 lines, modified on 2013-01-18 . Я пытался хранить обе части данных в своих переменных перед выводом с эхом.

 #!/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

Обе date -r и этот аромат stat являются специфичными для GNU. Возможно, вам рассказали о них пользователем 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 , если вы хотите, чтобы время символической ссылки (например, в команде GNU stat ) изменило stat на lstat в perl решение, или добавить -L в zstat ).

Кроме того, вы забыли двойные кавычки вокруг ваших переменных, и вы не должны использовать echo для произвольных данных.