![동일한 내용으로 파일을 다시 작성하면 수정 시간이 변경되나요?](https://linux55.com/image/9603/%EB%8F%99%EC%9D%BC%ED%95%9C%20%EB%82%B4%EC%9A%A9%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%8B%A4%EC%8B%9C%20%EC%9E%91%EC%84%B1%ED%95%98%EB%A9%B4%20%EC%88%98%EC%A0%95%20%EC%8B%9C%EA%B0%84%EC%9D%B4%20%EB%B3%80%EA%B2%BD%EB%90%98%EB%82%98%EC%9A%94%3F.png)
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에는 메시지 다이제스트 계산을 수행하는 라이브러리가 있습니다.