Да, время модификации изменится. Вы сами это видите:
echo Hello > test
stat test
sleep 2
echo Hello > test
stat test
Второй stat
будет показывать то же время доступа, что и первый (, что доказывает, что файл не был удален и -создан заново — что, конечно, соответствует требуемому поведению для >
), но обновлено изменить и изменить время.
Это указано в POSIX, например. вwrite()
:
Upon successful completion, where nbyte is greater than 0, write() shall mark for update the last data modification and last file status change timestamps of the file, and if the file is a regular file, the S_ISUID and S_ISGID bits of the file mode may be cleared.
При каждом сохранении файла время его модификации меняется. Если вы сохраняете файл после внесения изменений или просто сохраняете файл без внесения каких-либо изменений, время модификации изменяется.
Если время не меняется, скорее всего файл не сохраняется. Когда вы снова переписываете один и тот же контент, попробуйте проверить, сохраняется ли файл после перезаписи контента.
ПРИМЕЧАНИЕ :Это не прямой ответ на ваш вопрос, а ответ на очевидный дополнительный вопрос " Как определить, действительно ли файл изменился, если я не могу полагаться на отметку времени ? "
Если вам когда-нибудь понадобится проверить, изменилось ли содержимое(файла, а не только его временная метка ), вы должны сравнить текущее содержимое с предыдущим содержимым. Например, вsh
:
Выполнение сравнения байта -для -байта сcmp
:
if [ -e "$oldcopy" ] && cmp -s "$oldcopy" "$currentcopy" ; then
# do whatever needs doing if the file hasn't changed
else
# first do whatever needs doing if the file is new or has changed
# then make a copy of the current file
cp -af "$currentcopy" "$oldcopy"
fi
Использование контрольных сумм или хэшей, или дайджестов сообщений сmd5sum
:
if [ -e "$filename.md5sum" ] && md5sum --status "$filename.md5sum)" ; then
# do whatever needs doing if the file hasn't changed
else
# first do whatever needs doing if the file is new or has changed
# then save an md5sum of the current file
md5sum "$filename" > "$filename.md5sum"
fi
md5sum
использует больше ресурсов процессора для создания дайджеста сообщения для файла. cmp
использует больше места на диске для создания второй полной копии файла.
Любой другой инструмент дайджеста (, например.sha512
)можно использовать вместо md5sum
, если это необходимо... и, вероятно, следует использовать, если есть какие-либо последствия для безопасности, если файлы различаются.
Java, как и многие другие языки, имеет библиотеки для выполнения вычислений дайджеста сообщения.