如何获取NTFS逻辑卷上文件的创建日期?


9

我想在Linux系统上为Windows文件存储创建一个NTFS逻辑卷,因为我想保留文件的创建日期(我可能会把它们压缩到一个归档文件中,然后再解压缩,尽管我不知道这样是否可行)。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`

Answers:


6

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

尽管由于地球自转的未知变化而没有定义UTC,但NTFS文件由一组四个时间戳限定,“四个时间戳”表示自1601年1月1日以来的100纳秒间隔(UTC)。

您将在其中找到更多信息,包括:

较新版本的ntfs-3g公开了ntfs.ntfs_crtimeand 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)"

嗯,发布这个问题后,我实际上减去了11,644,473,600,但是由于我错了100纳秒的间隔,导致结果无效。我回到盒子时会进行测试。
NobleUplift

有效!谢谢。unpack("Q>")工作如何?我阅读了Perl文档,但我并不完全理解。
NobleUplift

1
@NobleUplift,解包大端(>)[Q] UAD(64位整数)
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.