NTFS 논리 볼륨에서 파일 생성 날짜를 얻는 방법은 무엇입니까?

NTFS 논리 볼륨에서 파일 생성 날짜를 얻는 방법은 무엇입니까?

파일 생성 날짜를 보존하고 싶었기 때문에 Windows 파일 저장용 Linux 시스템에 NTFS 논리 볼륨을 만들었습니다(가능한지는 모르겠지만 아카이브로 압축한 다음 압축을 풀 수 있습니다). NTFS-3G는 Linux에서 파일 생성 날짜를 저장합니까? 그렇다면 어떻게 액세스합니까?

읽다이 스레드, OP 링크문서NTFS에서는 생성 날짜를 찾기 위한 셸 스크립트가 제공됩니다. 16진수 값에서 초를 가져오도록 수정했지만 뭔가 잘못하고 있는 것 같습니다.

#!/bin/sh
CRTIME=`getfattr -h -e hex -n system.ntfs_times $1 | \
    grep '=' | sed -e 's/^.*=\(0x................\).*$/\1/'`
SECONDS=$(($CRTIME / 10000000))
echo `date --date=$SECONDS`

답변1

~에서https://github.com/tuxera/ntfs-3g/wiki/Using-Extended-Attributes#file-times,

NTFS 파일은 "1601년 1월 1일(UTC) 이후 100나노초 간격의 수를 나타내는" 4개의 타임스탬프 집합으로 한정됩니다. 하지만 UTC는 지구 자전의 알 수 없는 변화로 인해 1961년 이전에 정의되지 않았습니다.

여기에서 다음을 포함한 추가 정보를 찾을 수 있습니다.

최신 버전의 ntfs-3g는 ntfs.ntfs_crtimentfs.ntfs_crtime_be속성을 노출합니다.

그래서:

getfattr --only-values -n system.ntfs_crtime_be /some/file |
  perl -MPOSIX -0777 -ne '$t = unpack("Q>");
  print ctime $t/10000000-11644473600'

또한보십시오:

ntfsinfo -F /file/in/ntfs /dev/fs-device

이전 ntfs-3g의 경우 다음과 같이 작동합니다.

getfattr --only-values -n system.ntfs_times /some/file |
  perl -MPOSIX -0777 -ne 'print ctime unpack(Q)/10000000-11644473600'

또는 GNU 도구와 1초 미만의 정확도를 사용하세요.

date '+%F %T.%N' -d "@$({ echo 7k
  getfattr --only-values -n system.ntfs_times /some/file |
    od -A n -N 8 -vt u8; echo '10000000/ 11644473600-p'; } |dc)"

관련 정보