Ich habe auf meinem Linux-System ein logisches NTFS-Volume für die Windows-Dateispeicherung erstellt, weil ich das Erstellungsdatum meiner Dateien beibehalten möchte (ich würde sie wahrscheinlich in ein Archiv komprimieren und dann entpacken, obwohl ich keine Ahnung habe, ob das funktionieren würde). Speichert NTFS-3G das Erstellungsdatum von Dateien unter Linux? Wenn ja, wie greife ich darauf zu?
Beim Lesen dieses Threads enthält die OP-Links-Dokumentation zu NTFS, die ein Shell-Skript zum Ermitteln des Erstellungsdatums bereitstellt. Ich habe es geändert, um die Sekunden aus dem Hex-Wert zu bekommen, aber ich glaube, dass ich etwas falsch mache:
#!/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`
Akzeptierte Antwort:
Von https://www.tuxera.com/community/ntfs-3g-advanced/extended-attributes/#filetimes,
Eine NTFS-Datei wird durch einen Satz von vier Zeitstempeln qualifiziert, „die die Anzahl der 100-Nanosekunden-Intervalle seit dem 1. Januar 1601 (UTC) darstellen“, obwohl UTC für Jahre vor 1961 wegen unbekannter Variationen der Erdrotation nicht definiert wurde.
Dort finden Sie noch mehr Informationen, darunter:
Neuere Versionen von ntfs-3g legen eine ntfs.ntfs_crtime
offen und ntfs.ntfs_crtime_be
Attribut.
Also:
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
Mit älterem ntfs-3g sollte das funktionieren:
getfattr --only-values -n system.ntfs_times /some/file |
perl -MPOSIX -0777 -ne 'print ctime unpack(Q)/10000000-11644473600'
Oder mit GNU-Tools und einer Genauigkeit von weniger als einer Sekunde:
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)"