Я использую File :: модуль Copy, чтобы скопировать файл в Perl:Как скопировать файл в Perl и сохранить его временную метку?
#! /usr/bin/perl -w
use File::Copy;
copy("somefile.log", "copiedfile.log");
Я хотел бы сохранить временные метки (в частности, время модификации), но это, кажется, не вариант.
Есть ли простой способ достичь этого, не прибегая к системному вызову «cp -p»?
сохранить временную метку (использовать stat), сделать копию и применить временную метку снова (используя utime) не будет работать? (так же, как команда «touch») –
Джеймс, вы комментируете ответ Брайана: «Я бы с удивлением обнаружил, что обширные библиотеки Perl не имеют функции« копировать и сохранять атрибуты »(которая работает в Linux)», что вы имеете в виду под «работает над Linux»? Если вы говорите о cp -p, исходный код Linux делает именно то, что я предложил выше, используйте stat и utime для выполнения «сохранения». Вот он: (* (x-> xstat)) (src_path, & src_sb) ... \t utb.actime = src_sb.st_atime; \t utb.modtime = src_sb.st_mtime; \t utime (dst_path, & utb) –
Murali, Perl имеет чистую команду «копировать и сохранять атрибуты», rmscopy (см. Ниже ответ на ghostdog74), но он доступен только для систем VMS. В Windows я считаю, что syscopy выполнит эту работу, так как я думаю, что стандартная семантика для копирования файла в Windows сохраняет метки времени. В Linux это не так, поэтому комбинация с тремя строками «copy, stat, utime» кажется самым чистым решением «чистого Perl». Это кажется мне неэлегантным, но, по-видимому, это единственный вариант, не делая обратный системный вызов. –