Linux

如何獲取 NTFS 邏輯卷上文件的創建日期?

  • June 28, 2018

我在我的 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`

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

NTFS 文件由一組四個時間戳限定,“代表自 1601 年 1 月 1 日 (UTC) 以來的 100 納秒間隔數”,儘管由於地球自轉的未知變化,UTC 在 1961 年之前的幾年裡都沒有定義。

您會在其中找到更多資訊,包括:

較新版本的 ntfs-3g 公開了一個ntfs.ntfs_crtimeandntfs.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)"

引用自:https://unix.stackexchange.com/questions/87265