4

我想读取文件的创建日期,因为它在 Mac OS Finder 上表示。这是我的代码的一部分:

require File::stat;
use Time::localtime;

($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($file_path);
print ctime($ctime) . "\n";

在 Finder 上,每个文件都有两个日期:创建日期和修改日期。我假设这$ctime将等于 Finder 的“创建”日期,但它完全不同。做了一些研究,我发现大多数 Unix 操作系统不存储这种日期,但是,Mac OS 可以。

有人知道从文件中读取这些信息的方法吗?

4

2 回答 2

11

只需读取mdls命令的输出即可。您总是可以执行以下操作:

perl -e '@lines = qx(mdls filename.txt); print "@lines[3]";'

或类似的。

man mdls

 mdls -- lists the metadata attributes for the specified file

对于创建日期,您应该使用:

mdls -raw -name kMDItemFSCreationDate filename 

Ps:MacOSX::File::Catalog模块就是为此开发的,但不幸的是它在 Mountain Lion 中被破坏了。(安装过程中出错 - 至少在我的 OS X 上)

于 2013-07-27T00:08:01.277 回答
4

mdls命令的问题在于它的时间输出不是 UNIX 时间戳。尝试stat使用具有 Mac 特定功能的命令:

stat -f %B _filename_

在 perl 中:

$_="filename"
print scalar localtime `stat -f %B $_`
于 2016-05-30T08:06:41.050 回答