Jak uzyskać datę utworzenia pliku na woluminie logicznym NTFS?


9

Utworzyłem wolumin logiczny NTFS w moim systemie Linux do przechowywania plików Windows, ponieważ chcę zachować datę utworzenia moich plików (prawdopodobnie spakowałbym je do archiwum, a następnie rozpakowałem, choć nie mam pojęcia, czy to zadziała). Czy NTFS-3G zapisuje datę utworzenia plików w systemie Linux? Jeśli tak, jak mogę uzyskać do niego dostęp?

Czytając ten wątek , OP łączy dokumentację NTFS, która zawiera skrypt powłoki do znalezienia daty utworzenia. Zmodyfikowałem to, próbując uzyskać sekundy z wartości szesnastkowej, ale wierzę, że robię coś złego:

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

Odpowiedzi:


6

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

Plik NTFS jest kwalifikowany przez zestaw czterech znaczników czasu „reprezentujących liczbę odstępów 100 nanosekund od 1 stycznia 1601 r. (UTC)”, chociaż UTC nie został zdefiniowany na lata przed 1961 r. Z powodu nieznanych odmian obrotu Ziemi.

Znajdziesz tam jeszcze więcej informacji, w tym:

Nowsze wersje ntfs-3g ujawniają atrybuty ntfs.ntfs_crtimei ntfs.ntfs_crtime_be.

Więc:

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

Zobacz też:

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

W przypadku starszych ntfs-3g powinno to działać:

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

Lub z narzędziami GNU i precyzją poniżej sekundy:

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

Ach, właściwie odejmowałem 11 644 473 600 po tym, jak opublikowałem to pytanie, ale ponieważ miałem błędne odstępy 100 nanosekund, spowodowało to niepoprawny wynik. Przetestuję to, kiedy wrócę do mojego pudełka.
NobleUplift,

Zadziałało! Dzięki. Jak unpack("Q>")działa Czytam dokument Perla i nie do końca go rozumiem.
NobleUplift,

1
@NobleUplift, rozpakowuje duży endian (>) [Q] uad (liczba całkowita 64-bitowa)
Stéphane Chazelas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.