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_crtimeプロパティntfs.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)"

関連情報