Внимание: не анализируйте вывод ls
. Его вывод предназначен для потребления человеком , чтобы понять содержимое файловой системы. Если вы хотите, чтобы программа знала информацию о времени файла, используйте stat
1 .
Теперь, со всем этим, я отвечу на ваш вопрос. Время меняется, потому что так определено работать. Из документации POSIX по ls
:
Поле должно содержать соответствующую дату и метку времени последнего изменения файла. В локали POSIX это поле должно быть эквивалентно выводу следующей команды даты:
date "+%b %e %H:%M"
, если файл был изменен за последние шесть месяцев, или:
date "+%b %e %Y"
(где используются два символа между% e и% Y), если файл не был изменен в течение последних шести месяцев или если дата модификации находится в будущем, за исключением того, что в обоих случаях окончательный результат производится по дате не должны быть включены, и выходные данные должны быть такими, как если бы команда date была выполнена во время последней даты изменения файла, а не в настоящее время. Когда категория языкового стандарта LC_TIME не установлена на языковой стандарт POSIX, может использоваться другой формат и порядок представления этого поля.
Это определение создает ужасную путаницу для анализа программы. Итак, повторюсь: не анализировать ls
вывод.
1 Если у вас нет stat
на вашей коробке Solaris, то вам, возможно, просто придется положиться на ls
. Мне жаль. Команда для этого примерно равна ls -siv -@ -/ c -%all z
.