我在 Linux 系统上创建了一个 NTFS 逻辑卷用于 Windows 文件存储,因为我想保留文件的创建日期(我可能会将它们压缩到存档中,然后解压缩,尽管我不知道这是否可行)。 NTFS-3G 是否保存 Linux 上文件的创建日期?如果是这样,我该如何访问它?
阅读这个线程,OP链接文档在 NTFS 上,提供用于查找创建日期的 shell 脚本。我修改了它,试图从十六进制值中获取秒数,但我相信我做错了什么:
#!/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 纳秒间隔的数量”来限定,尽管由于地球自转的未知变化,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 工具和亚秒级精度:
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)"