Если файл перезаписывается с тем же содержимым, изменится ли время модификации?

Попробуйте stty erase <нажмите backspace> .

1
20.07.2017, 01:41
3 ответа

Да, время модификации изменится. Вы сами это видите:

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.

1
27.01.2020, 23:45

При каждом сохранении файла время его модификации меняется. Если вы сохраняете файл после внесения изменений или просто сохраняете файл без внесения каких-либо изменений, время модификации изменяется.

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

0
27.01.2020, 23:45

ПРИМЕЧАНИЕ :Это не прямой ответ на ваш вопрос, а ответ на очевидный дополнительный вопрос " Как определить, действительно ли файл изменился, если я не могу полагаться на отметку времени ? "

Если вам когда-нибудь понадобится проверить, изменилось ли содержимое(файла, а не только его временная метка ), вы должны сравнить текущее содержимое с предыдущим содержимым. Например, в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, как и многие другие языки, имеет библиотеки для выполнения вычислений дайджеста сообщения.

0
27.01.2020, 23:45

Теги

Похожие вопросы