NTFS 논리 볼륨에서 파일 작성 날짜를 어떻게 얻습니까?


9

파일의 생성 날짜를 유지하고 싶기 때문에 Linux 파일 시스템 용 NTFS 시스템에 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`

답변:


6

에서 https://www.tuxera.com/community/ntfs-3g-advanced/extended-attributes/#filetimes ,

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 도구와 초 단위 정밀도로 :

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)"

아, 실제로이 질문을 게시 한 후 11,644,473,600을 빼고 있었지만 100 나노 초 간격이 잘못되어 잘못된 결과가 발생했습니다. 상자로 돌아갈 때 이것을 테스트하겠습니다.
NobleUplift

효과가 있었다! 감사. 어떻게 unpack("Q>")작동합니까? 나는 Perl 문서를 읽었고 그것을 완전히 이해하지 못한다.
NobleUplift

1
@NobleUplift, 빅 엔디 언 개봉 (>) [Q] uad (64 비트 정수)
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.