복사한 파일의 날짜가 달라졌다면: 수정 시각과 내용 비교

중요한 문서를 다른 저장 장치나 폴더로 복사한 뒤 파일 속성을 열었을 때, 파일의 날짜와 시각이 원본과 달라져 당황하는 경우가 있습니다. 방금 복사한 현재 시각으로 바뀌어 있으면 내용까지 변경되거나 손상된 것은 아닌지 의심하게 됩니다. 하지만 파일 시스템에서 관리하는 시간 정보는 본문 데이터와 별도로 기록되는 메타데이터입니다.

앞서 다룬 파일 중복 확인: SHA-256 해시로 두 파일 비교에서는 본문 내용의 일치 여부를 대조하는 원리를 다루었습니다. 이번 글에서는 해시 계산을 거듭 반복하기에 앞서, 복사 방식에 따라 날짜가 달라지는 이유와 단순 내용 복사본과 메타데이터 보존 사본을 구분하는 체계적인 점검 절차를 살펴봅니다.

1. 파일 내용(바이트)과 시간 메타데이터의 분리

운영체제와 파일 시스템은 파일의 실제 바이트 데이터와 파일의 부가 정보(이름, 크기, 수정 시각, 접근 권한 등)를 서로 다른 영역에 보관합니다. 파일을 복사할 때 도구가 수행하는 기본 작업은 원본 파일의 바이트를 읽어 대상 위치에 새 파일을 생성하고 그대로 쓰는 작업입니다.

이 과정에서 새 파일을 만드는 방식을 사용하면, 대상 파일 시스템은 해당 사본 파일이 생성된 현재 시점을 수정 시각과 생성 시각으로 부여합니다. 즉, 본문 바이트는 원본과 정확히 1바이트의 오차도 없이 동일하더라도, 복사 도구가 원본의 시간 메타데이터를 복제해 덮어쓰지 않았다면 파일 탐색기나 터미널에는 복사 작업이 일어난 시각이 표시됩니다.

2. 복사 도구별 메타데이터 보존 방식과 옵션

프로그래밍 환경이나 백업 도구에서 복사를 실행할 때 어떤 함수나 옵션을 사용하는지에 따라 메타데이터 보존 여부가 결정됩니다. 예를 들어 파이썬 표준 라이브러리의 파일 작업 모듈에서는 다음과 같이 명확히 함수 동작이 구분됩니다.

  • 단순 복사(shutil.copy): 파일의 권한 모드는 복사하지만, 수정 시각이나 메타데이터를 원본과 동일하게 맞추지 않습니다. 복사된 파일의 수정 시각은 복사된 순간으로 갱신됩니다.
  • 메타데이터 보존 복사(shutil.copy2): shutil.copy2는 파일 내용을 복사한 뒤 내부적으로 copystat()을 호출하여 원본의 수정 시각과 플래그 등 파일 메타데이터를 최대한 보존하려고 시도합니다.

따라서 스크립트나 명령줄 도구로 파일을 옮겼을 때 날짜가 최신으로 바뀌었다면, 파일이 손상된 것이 아니라 메타데이터를 보존하지 않는 단순 스트림 복사 방식으로 작업이 수행되었을 가능성을 먼저 확인해야 합니다.

3. 크기·바이트·수정 시각을 분리해 기록하는 점검 절차

날짜가 달라진 사본을 원본과 안전하게 비교하려면 원본을 덮어쓰거나 수정하지 않는 상태에서 다음 단계를 순서대로 진행합니다.

  1. 원본 보존: 비교 과정에서 실수로 원본에 쓰기 작업이 일어나지 않도록 원본 디렉터리를 읽기 전용 상태로 두고 격리합니다.
  2. 파일 크기(Byte) 대조: 파일 속성 창이나 명령줄에서 표시되는 바이트 단위의 정확한 크기가 일치하는지 확인합니다. 글자 수와 바이트 차이에서 보듯 텍스트 인코딩이나 줄바꿈 변경이 발생했다면 크기부터 달라집니다.
  3. 복사 방식 분류: 해당 사본이 내용을 단순히 읽어 쓴 사본인지, 메타데이터 보존 플래그를 적용한 사본인지 확인합니다.
  4. 비교 대장 작성: 크기, 내용 일치, 수정 시각을 독립된 열로 기록하여 파일 상태를 판정합니다.
파일의 내용을 읽어 쓴 사본과 메타데이터 보존 옵션을 쓴 사본을 구분한다. 크기/바이트/수정 시각을 별도 열로 기록하고 원본을 보존한다. 모든 운영체제의 생성 시각을 보존한다고 쓰지 않는다.
구분크기 (바이트)본문 내용수정 시각판정
원본 파일1,048,576 B기준 데이터2024-03-15 10:20원본 기준
단순 내용 복사본1,048,576 B일치2026-10-23 14:05 (복사 시각)내용 정상, 메타데이터 미복제
메타데이터 보존 사본1,048,576 B일치2024-03-15 10:20 (보존 성공)내용 및 수정 시각 일치

4. 재현 예제: 복사 방식에 따른 메타데이터 차이

스크립트를 사용하여 동일한 원본 파일을 두 가지 방식으로 복사했을 때의 차이를 관찰할 수 있는 재현 구조입니다.

# [입력 재현 조건] # 원본 파일: report.docx (수정 시각: 2024-03-15 10:20:00) # 방법 A: 일반 읽기/쓰기 복사 (shutil.copy) # 방법 B: 메타데이터 보존 복사 (shutil.copy2)  # [실행 결과 비교] # 방법 A 사본: #   내용 바이트: report.docx와 100% 일치 #   수정 시각: 2026-10-23 14:05:00 (현재 시각으로 갱신됨) # 방법 B 사본: #   내용 바이트: report.docx와 100% 일치 #   수정 시각: 2024-03-15 10:20:00 (원본 수정 시각 유지)

이처럼 단순 스트림 복사를 수행하면 내용은 안전하게 복제되지만 시간 기록은 복사 당시 시점으로 새롭게 남게 됩니다. 날짜가 바뀌었다고 해서 본문 내용이 변경된 것은 아닙니다.

5. 이 점검 방식으로 확인할 수 없는 한계와 주의점

수정 시각과 내용 바이트를 비교하는 절차를 진행할 때에는 다음과 같은 시스템적 한계와 예외 상황을 고려해야 합니다.

  • 운영체제별 생성 시각(Creation Time) 보존 불가: 메타데이터 보존 도구를 사용하더라도 모든 운영체제에서 원본의 '생성 시각'까지 완벽하게 복제되는 것은 아닙니다. 파일 시스템 종류(NTFS, ext4, APFS 등)에 따라 지원하는 타임스탬프 속성이 다릅니다.
  • 예외 없는 메타데이터 복사 실패: 파이썬의 shutil.copy2 공식 문서에 명시되어 있듯이, 플랫폼에 따라 특정 메타데이터 복사 기능이 지원되지 않는 환경에서는 보존할 수 있는 범위의 메타데이터만 복사하며 메타데이터 복사에 실패하더라도 예외(Exception)를 발생시키지 않습니다. 따라서 도구가 오류 없이 완료되었다고 해서 모든 속성이 동일함을 보장하지는 않습니다.
  • 줄바꿈 변환 도구의 개입: 단순 파일 복사가 아닌 텍스트 전송 도구나 형상 관리 도구를 거치면서 복사된 경우 CRLF와 LF의 차이로 인해 바이트 크기 자체가 미세하게 달라질 수 있습니다. 바이트 크기가 다르면 메타데이터 이전에 본문 변형을 먼저 조사해야 합니다.

참고 자료와 확인 범위

아래 자료는 형식·기능의 정의를 확인하는 데 사용했습니다. 본문의 예제와 설명은 이 사이트의 작업 상황에 맞춰 구성했습니다. 제품 메뉴는 버전과 언어에 따라 다를 수 있습니다.

확인일: 2026-10-23 · 오류를 발견하면 이 글의 오류 신고로 알려주세요.