ฉันจะรับวันที่สร้างไฟล์บนโลจิคัลวอลุ่ม NTFS ได้อย่างไร


9

ฉันสร้างโลจิคัลวอลุ่ม NTFS บนระบบ Linux ของฉันสำหรับที่เก็บไฟล์ Windows เพราะฉันต้องการเก็บวันที่สร้างไฟล์ของฉัน (ฉันอาจจะซิปมันลงในไฟล์เก็บถาวรแล้วเปิดเครื่องรูดมันแม้ว่าฉันจะไม่รู้ NTFS-3G บันทึกวันที่สร้างไฟล์บน Linux หรือไม่ ถ้าเป็นเช่นนั้นฉันจะเข้าถึงได้อย่างไร

อ่านหัวข้อนี้เอกสารประกอบการเชื่อมโยง OP บน NTFS ที่มีเชลล์สคริปต์สำหรับการค้นหาวันที่สร้าง ฉันแก้ไขในความพยายามที่จะได้รับวินาทีจากค่าฐานสิบหก แต่ฉันเชื่อว่าฉันกำลังทำอะไรผิด:

#!/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`

คำตอบ:


6

จากhttps://www.tuxera.com/community/ntfs-3g-advanced/extended-attributes/#filetimes ,

ไฟล์ NTFS ผ่านการรับรองโดยชุดการประทับเวลาสี่ครั้ง“ แทนจำนวนช่วงเวลา 100 นาโนวินาทีตั้งแต่วันที่ 1 มกราคม 1601 (UTC)” ถึงแม้ว่า UTC จะไม่ได้ถูกกำหนดเป็นเวลาหลายปีก่อนปี 1961 เนื่องจากการหมุนรอบโลกที่ไม่รู้จัก

คุณจะพบข้อมูลเพิ่มเติมที่นั่นรวมถึง:

รุ่นที่ใหม่กว่าของ ntfs-3g เปิดเผย a 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)"

อาฉันลบ 11,644,473,600 จริง ๆ หลังจากที่ฉันโพสต์คำถามนี้ แต่เนื่องจากฉันมีระยะเวลา 100 นาโนวินาทีผิดจึงทำให้ผลลัพธ์ไม่ถูกต้อง ฉันจะทดสอบสิ่งนี้เมื่อฉันกลับไปที่กล่อง
NobleUplift

มันได้ผล! ขอบคุณ วิธีการunpack("Q>")ทำงานหรือไม่ ฉันอ่านPerl docแล้วฉันก็ไม่เข้าใจเลย
NobleUplift

1
@NobleUplift, แก้ตัว endian ใหญ่ (>) [Q] uad (จำนวนเต็ม 64 บิต)
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.