Как я могу сравнить время создания файла с текущим временем в Perl? - PullRequest
5 голосов
/ 29 декабря 2008

Я хочу сравнить текущее время и время создания файла в Perl, но оба в другом формате. местное время в этом формате:

22116291110813630

и время создания файла

Today, December 29, 2008, 2:38:37 PM

Как мне сравнить, какой из них больше, и их различие?

Ответы [ 4 ]

15 голосов
/ 29 декабря 2008

Это даже проще, чем использовать stat () и time () / localtime ().

my $diff = -M $filename;

Оператор -M возвращает «возраст» файла (в днях с момента запуска программы). Это задокументировано в -X функциях или в perldoc -f -X.

13 голосов
/ 29 декабря 2008

Если вы хотите сравнить значения, вы можете использовать число, полученное вами от localtime в скалярном контексте, и время изменения индекса, которое вы можете получить из stat:

               ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
                  $atime,$mtime,$ctime,$blksize,$blocks)
                      = stat($filename);

где:

                 0 dev      device number of filesystem
                 1 ino      inode number
                 2 mode     file mode  (type and permissions)
                 3 nlink    number of (hard) links to the file
                 4 uid      numeric user ID of file's owner
                 5 gid      numeric group ID of file's owner
                 6 rdev     the device identifier (special files only)
                 7 size     total size of file, in bytes
                 8 atime    last access time in seconds since the epoch
                 9 mtime    last modify time in seconds since the epoch
                10 ctime    inode change time in seconds since the epoch (*)
                11 blksize  preferred block size for file system I/O
                12 blocks   actual number of blocks allocated

Итак, вы хотите поле 9:


$mtime = ( stat $filename )[9];
$current_time = time;

$diff = $current_time - $mtime;

3 голосов
/ 29 декабря 2008

localtime возвращает список значений в контексте списка. См. документацию по местному времени или perlcheat . В вашем примере это похоже на то, как все собрались вместе. В скалярном контексте он возвращает отформатированную строку, такую ​​как Mon Dec 29 03:16:33 2008. На большинстве платформ время изменения инода файла будет возвращаться с stat в виде количества секунд с некоторой эпохи. Вы должны иметь возможность напрямую сравнить это с результатом time() ( не localtime()).

0 голосов
/ 25 февраля 2013

Эти две функции - благодаря ответу jimtut. fileage печатает число секунд как целое число, идеально подходящее для использования в оболочке, файла с момента его создания. fileage - ответ на поставленный выше вопрос, в то время как dataage печатает то же самое для содержимого файла, что и тот ответ, который я искал, я уверен, что оба они будут полезны.

function fileage {
  perl -e 'printf "%i\n", 60 * 60 * 24 * -C "'"${1:?Must provide a file name}"'"'
}

function dataage {
  perl -e 'printf "%i\n", 60 * 60 * 24 * -M "'"${1:?Must provide a file name}"'"'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...