NTFS mantıksal birimindeki bir dosyanın oluşturulma tarihini nasıl alabilirim?


9

Windows dosya depolaması için Linux sistemimde bir NTFS mantıksal birimi oluşturdum çünkü dosyalarımın oluşturulma tarihini korumak istiyorum (muhtemelen bunları bir arşive sıkıştırır ve daha sonra bunları çıkarırdım, ancak işe yarayacaksa hiçbir fikrim yok). NTFS-3G, Linux'ta dosyaların oluşturulma tarihini kaydediyor mu? Öyleyse, ona nasıl erişirim?

Okuma Konuyu OP bağlantılar dokümantasyon oluşturma tarihini bulmak için bir kabuk komut dosyası sağlar NTFS'de. Onaltılık değerden saniye almak için bir girişimde değiştirdim, ama yanlış bir şey yaptığımı düşünüyorum:

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

Yanıtlar:


6

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

Bir NTFS dosyası, “1 Ocak 1601'den (UTC) bu yana 100 nanosaniye aralık sayısını temsil eden” dört zaman damgası kümesiyle nitelendirilir, ancak UTC, dünya dönmesinin bilinmeyen varyasyonları nedeniyle 1961'den önceki yıllar için tanımlanmamıştır.

Orada daha da fazla bilgi bulacaksınız:

Ntfs-3g'nin daha yeni sürümleri a ntfs.ntfs_crtimeve ntfs.ntfs_crtime_beniteliğini ortaya çıkarır .

Yani:

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

Ayrıca bakınız:

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

Eski ntfs-3g ile, bu işe yaramalıdır:

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

Veya GNU araçları ve ikinci altı hassasiyetle:

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, bu soruyu gönderdikten sonra aslında 11,644,473,600 çıkarıyordum, ancak 100 nanosaniye aralıkları yanlış yaptığım için geçersiz bir sonuçla sonuçlanıyordu. Kutuma geri döndüğümde bunu test edeceğim.
NobleUplift

İşe yaradı! Teşekkürler. Nasıl unpack("Q>")çalışır? Perl belgesini okudum ve tam olarak anlamıyorum.
NobleUplift

1
@NobleUplift, büyük bir endianı açar (>) [Q] uad (64bit tamsayı)
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.