developer tip

Perl에서 파일의 마지막 수정 시간은 어떻게 얻습니까?

copycodes 2020. 11. 26. 18:44
반응형

Perl에서 파일의 마지막 수정 시간은 어떻게 얻습니까?


파일 핸들이 있다고 가정합니다 $fh. 내가 가진 그것의 존재를 확인할 수 있습니다 -e $fh이나와 파일 크기 -s $fh또는 파일에 대한 추가 정보의 슬루 . 마지막으로 수정 된 타임 스탬프를 어떻게 얻을 수 있습니까?


내장 모듈 File::stat(Perl 5.004부터 포함)을 사용할 수 있습니다 .

를 호출 stat($fh)하면 전달 된 파일 핸들에 대한 다음 정보가있는 배열이 반환됩니다 (에 대한 perlfunc 매뉴얼 페이지에서stat ).

  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 since the epoch
  9 mtime    last modify time since the epoch
 10 ctime    inode change time (NOT creation time!) since the epoch
 11 blksize  preferred block size for file system I/O
 12 blocks   actual number of blocks allocated

이 배열의 요소 번호 9는 Epoch ( GMT 1970 년 1 월 1 일 00:00) 이후 마지막으로 수정 된 시간을 제공합니다 . 그로부터 현지 시간을 결정할 수 있습니다.

my $epoch_timestamp = (stat($fh))[9];
my $timestamp       = localtime($epoch_timestamp);

이전 예제에서 필요한 매직 넘버 9 를 피하려면 추가 Time::localtime로 다른 내장 모듈 (Perl 5.004부터 포함됨)을 사용하십시오. 여기에는 (논란의 여지가 있지만) 더 읽기 쉬운 코드가 필요합니다.

use File::stat;
use Time::localtime;
my $timestamp = ctime(stat($fh)->mtime);

내장 된 stat 함수를 사용하십시오 . 또는 더 구체적으로 :

my $modtime = (stat($fh))[9]

my @array = stat($filehandle);

수정 시간은 $ array [9]에 Unix 형식으로 저장됩니다.

또는 명시 적으로 :

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

  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

그 시대는 GMT 1970 년 1 월 1 일 00:00입니다.

자세한 정보는 stat에 있습니다.


stat 호출과 파일 이름이 필요합니다.

my $last_mod_time = (stat ($file))[9];

Perl에는 다른 버전도 있습니다.

my $last_mod_time = -M $file;

그러나 그 값은 프로그램이 시작된시기에 상대적입니다. 이것은 정렬과 같은 일에 유용하지만 아마도 첫 번째 버전이 필요할 것입니다.


두 파일을 비교하여 더 새로운 파일을 확인하는 -C경우 작동해야합니다.

if (-C "file1.txt" > -C "file2.txt") {
{
    /* Update */
}

There's also -M, but I don't think it's what you want. Luckily, it's almost impossible to search for documentation on these file operators via Google.


You could use stat() or the File::Stat module.

perldoc -f stat

I think you're looking for the stat function (perldoc -f stat)

In particular, the 9th field (10th, index #9) of the returned list is the last modify time of the file in seconds since the epoch.

So:

my $last_modified = (stat($fh))[9];


On my FreeBSD system, stat just returns a bless.

$VAR1 = bless( [
                 102,
                 8,
                 33188,
                 1,
                 0,
                 0,
                 661,
                 276,
                 1372816636,
                 1372755222,
                 1372755233,
                 32768,
                 8
               ], 'File::stat' );

You need to extract mtime like this:

my @ABC = (stat($my_file));

print "-----------$ABC['File::stat'][9] ------------------------\n";

or

print "-----------$ABC[0][9] ------------------------\n";

This is very old thread, but I tried using the solution and could not get the information out of File::stat. (Perl 5.10.1)

I had to do the following:

my $f_stats = stat($fh);
my $timestamp_mod = localtime($f_stats->mtime);
print "MOD_TIME = $timestamp_mod \n";

Just thought I share in case anyone else had the same trouble.

참고 URL : https://stackoverflow.com/questions/509576/how-do-i-get-a-files-last-modified-time-in-perl

반응형