Como obtenho a data de criação de um arquivo em um volume lógico NTFS?

9

Eu criei um volume lógico NTFS no meu sistema Linux para armazenamento de arquivos do Windows porque eu quero manter a data de criação dos meus arquivos (eu provavelmente os compactaria em um arquivo e os descompactaria, embora eu não tenha ideia se isso seria trabalhos). O NTFS-3G salva a data de criação dos arquivos no Linux? Se sim, como faço para acessá-lo?

Lendo este tópico , os links OP documentação em NTFS que fornece um script de shell para localizar a data de criação. Eu modifiquei em uma tentativa de obter os segundos do valor hexadecimal, mas acredito que estou fazendo algo errado:

#!/bin/sh
CRTIME='getfattr -h -e hex -n system.ntfs_times $1 | \
    grep '=' | sed -e 's/^.*=\(0x................\).*$//''
SECONDS=$(($CRTIME / 10000000))
echo 'date --date=$SECONDS'
    
por NobleUplift 18.08.2013 / 20:41

1 resposta

6

De link ,

An NTFS file is qualified by a set of four time stamps “representing the number of 100-nanosecond intervals since January 1, 1601 (UTC)”, though UTC has not been defined for years before 1961 because of unknown variations of the earth rotation.

Você encontrará ainda mais informações, incluindo:

Versões mais recentes do ntfs-3g expõem um atributo ntfs.ntfs_crtime e ntfs.ntfs_crtime_be .

Então:

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

Veja também:

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

Com o ntfs-3g mais antigo, isso deve funcionar:

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

Ou com ferramentas GNU e precisão de sub-segundo:

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)"
    
por 18.08.2013 / 22:31