Linux
如何獲取 NTFS 邏輯卷上文件的創建日期?
我在我的 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_crtime
andntfs.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)"