Làm cách nào để có được ngày tạo tệp trên ổ đĩa logic NTFS?


9

Tôi đã tạo một khối logic NTFS trên hệ thống Linux của mình để lưu trữ tệp Windows vì tôi muốn giữ lại ngày tạo tệp của mình (tôi có thể sẽ nén chúng vào một kho lưu trữ và sau đó giải nén chúng, mặc dù tôi không biết liệu nó có hoạt động không). NTFS-3G có lưu ngày tạo tệp trên Linux không? Nếu vậy, làm thế nào để tôi truy cập nó?

Đọc chủ đề này , OP liên kết tài liệu trên NTFS cung cấp tập lệnh shell để tìm ngày tạo. Tôi đã sửa đổi nó trong một nỗ lực để có được giây từ giá trị hex, nhưng tôi tin rằng tôi đang làm sai điều gì đó:

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

Câu trả lời:


6

Từ https://www.tuxera.com/community/ntfs-3g-advified/extends-attribut/#filetimes ,

Một tệp NTFS đủ điều kiện bằng một bộ bốn tem thời gian, biểu thị số lượng khoảng thời gian 100 nano giây kể từ ngày 1 tháng 1 năm 1601 (UTC), mặc dù UTC đã không được xác định trong nhiều năm trước năm 1961 do các biến thể không xác định của vòng quay trái đất.

Bạn sẽ tìm thấy nhiều thông tin hơn trong đó bao gồm:

Các phiên bản mới hơn của ntfs-3g hiển thị a ntfs.ntfs_crtimentfs.ntfs_crtime_bethuộc tính.

Vì thế:

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

Xem thêm:

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

Với ntfs-3g cũ hơn, điều này sẽ hoạt động:

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

Hoặc với các công cụ GNU và độ chính xác phụ thứ hai:

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

À, tôi thực sự đã trừ 11.644.473.600 sau khi tôi đăng câu hỏi này, nhưng vì tôi đã sai khoảng 100 nano giây nên nó đã dẫn đến kết quả không hợp lệ. Tôi sẽ kiểm tra điều này khi tôi quay trở lại hộp của mình.
NobleUplift

Nó đã làm việc! Cảm ơn. Làm thế nào để unpack("Q>")làm việc? Tôi đọc tài liệu Perl và tôi hoàn toàn không hiểu nó.
NobleUplift

1
@NobleUplift, giải nén một endian lớn (>) [Q] uad (số nguyên 64 bit)
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.