Bagaimana cara mendapatkan tanggal pembuatan file pada volume logis NTFS?


9

Saya membuat volume logis NTFS pada sistem Linux saya untuk penyimpanan file Windows karena saya ingin mempertahankan tanggal pembuatan file-file saya (saya mungkin akan zip mereka ke dalam arsip dan kemudian unzip, meskipun saya tidak tahu apakah itu akan berhasil). Apakah NTFS-3G menyimpan tanggal pembuatan file di Linux? Jika demikian, bagaimana cara mengaksesnya?

Membaca utas ini , dokumentasi tautan OP pada NTFS yang menyediakan skrip shell untuk menemukan tanggal pembuatan. Saya memodifikasinya sebagai upaya untuk mendapatkan detik dari nilai hex, tetapi saya percaya bahwa saya melakukan sesuatu yang salah:

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

Jawaban:


6

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

File NTFS dikualifikasikan oleh satu set perangko waktu “mewakili jumlah interval 100 nanodetik sejak 1 Januari 1601 (UTC)”, meskipun UTC belum ditentukan untuk tahun sebelum 1961 karena variasi rotasi bumi yang tidak diketahui.

Anda akan menemukan lebih banyak informasi di sana termasuk:

Versi ntfs-3g yang lebih baru mengekspos a ntfs.ntfs_crtimedan ntfs.ntfs_crtime_beatribut.

Begitu:

getfattr --only-values -n system.ntfs_crtime_be /some/file |
  perl -MPOSIX -0777 -ne '$t = unpack("Q>");
  print ctime $t/10000000-11644473600'

Lihat juga:

ntfsinfo -F /file/in/ntfs /dev/fs-device

Dengan ntfs-3g yang lebih tua, ini seharusnya bekerja:

getfattr --only-values -n system.ntfs_times /some/file |
  perl -MPOSIX -0777 -ne 'print ctime unpack(Q)/10000000-11644473600'

Atau dengan alat GNU dan presisi sub-detik:

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)"

Ah, saya benar-benar mengurangi 11.644.473.600 setelah saya memposting pertanyaan ini, tetapi karena saya memiliki interval 100-nanosecond yang salah itu menghasilkan hasil yang tidak valid. Saya akan menguji ini ketika saya kembali ke kotak saya.
NobleUplift

Berhasil! Terima kasih. Bagaimana cara unpack("Q>")kerjanya? Saya membaca dokumen Perl dan saya tidak sepenuhnya memahaminya.
NobleUplift

1
@NobleUplift, membongkar endian besar (>) [Q] uad (integer 64bit)
Stéphane Chazelas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.