Изменено время после копирования файла - PullRequest
0 голосов
/ 28 января 2019

В perl 5, используя stat для файла, который был недавно скопирован из старого файла, кажется, что mtime - это время, в которое старый файл был изначально создан, а не скопирован.

Как мне получитьвремя копирования?ctime кажется самым близким, однако в документации есть предупреждения о совместимости между операционными системами.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Есть несколько неуказанных деталей, но кажется, что отметка времени ctime - лучший встроенный инструмент в вашем распоряжении.(Для Windows также см. Модуль, связанный ниже.)

В Windows, в соответствии с perlport (Файлы и файловые системы) , время изменения inode отметка времени

... может действительно быть «меткой времени создания» (которой нет в Unix).

Это будет работать непосредственно для вас, если файл создаетсякопирование.

В Unix ctime отслеживает изменение inode (вместе с изменениями метаданных), что, по-видимому, является тем, что вам нужно.Эту временную метку также можно получить просто с помощью оператора проверки файлов -C .

Если копирование может обновить содержимое существующего файла, я не понимаю, почему ctime не будетне работает.

Обратите внимание на модуль Win32API :: File :: Time , с целью

обеспечить максимальный доступ к созданию файла, модификации,и время доступа под MSWin32

Пожалуйста, ознакомьтесь с некоторыми предостережениями в документации.Я не использовал его и не могу проверить на Windows.

0 голосов
/ 28 января 2019

Простой ответ: в большинстве случаев вы не можете.

ctime - это , а не время создания файла.Цитирование из man 7 inode в системе Linux:

Отметка времени последнего изменения статуса (ctime) stat.st_ctime;statx.stx_ctime

Это последняя отметка времени изменения статуса файла.Он изменяется путем записи или путем установки информации об узле (т. Е. Владельца, группы, количества ссылок, режима и т. Д.).

Если

  • вам не требуетсяпереносимость
  • работают на ядре с поддержкой для него
  • файл находится в файловой системе, которая поддерживает его.

Цитирование из man 7 inode наСистема Linux:

Отметка времени создания (рождения) файла (btime) (не возвращается в структуре stat);statx.stx_btime

Метка времени создания файла.Это устанавливается при создании файла и впоследствии не изменяется.

Отметка времени btime исторически отсутствовала в системах UNIX и в настоящее время не поддерживается большинством файловых систем Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...