동일한 내용으로 파일을 다시 작성하면 수정 시간이 변경되나요?

동일한 내용으로 파일을 다시 작성하면 수정 시간이 변경되나요?

Java 프로그램에 의해 주기적으로 기록되는 파일이 있습니다.
똑같은 내용으로 다시 쓰면 파일 수정 시간이 바뀌나요?
그렇지 않은 것 같습니다. 놀랍게도 새로운 콘텐츠와 기존 콘텐츠를 비교하는 방법은 없습니다.

이런, 내용이 변경되지 않으면 Java 프로그램이 파일에 쓰지 않는다는 것을 깨달았습니다. 내 잘못. 하지만 명쾌한 답을 얻게 되어 기쁘다.

답변1

네, 수정시간이 변경됩니다. 직접 확인해 보세요.

echo Hello > test
stat test
sleep 2
echo Hello > test
stat test

두 번째는 stat첫 번째와 동일한 액세스 시간을 표시하지만(이는 파일이 삭제되고 다시 생성되지 않았음을 증명합니다. 이는 물론 원하는 동작을 준수합니다 >), 수정 및 변경 시간이 업데이트되었습니다.

이는 POSIX에 의해 지정됩니다.예를 들어존재하다write():

성공적으로 완료한 후,바이트0보다 큼,쓰다()업데이트된 파일의 마지막 데이터 수정 및 마지막 파일 상태 변경 타임스탬프가 표시되어야 하며, 파일이 일반 파일인 경우 파일 모드의 S_ISUID 및 S_ISGID 비트를 지울 수 있습니다.

답변2

파일을 저장할 때마다 수정 시간이 변경됩니다. 파일을 변경한 후 저장하거나, 파일을 변경하지 않고 그대로 저장하면 수정 시간이 변경됩니다.

시간이 변경되지 않았다면 파일이 저장되지 않았을 가능성이 높습니다. 같은 내용을 다시 작성하는 경우, 내용을 다시 작성한 후 파일이 저장되었는지 확인해보세요.

답변3

참고: 이는 귀하의 질문에 대한 직접적인 답변이 아니라, 명백한 후속 질문에 대한 답변입니다."타임스탬프에 의존할 수 없는 경우 파일이 실제로 변경되었는지 어떻게 감지합니까?"

파일이 있는지 확인해야 하는 경우콘텐츠(타임스탬프뿐만 아니라) 변경되었으며 현재 콘텐츠를 이전 콘텐츠와 비교해야 합니다. 예를 들면 다음과 같습니다 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파일에 대한 메시지 다이제스트를 생성하려면 더 많은 CPU 성능을 사용하십시오. cmp파일의 두 번째 전체 복사본을 만들려면 더 많은 디스크 공간을 사용하십시오.

sha512원하는 경우 다른 요약 도구(예:)를 대신 사용할 수 있습니다 md5sum. 파일이 다르면 보안에 영향을 미치는 경우 이를 사용해야 할 것입니다.

다른 많은 언어와 마찬가지로 Java에는 메시지 다이제스트 계산을 수행하는 라이브러리가 있습니다.

관련 정보