Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 使用Perl读取Mac OS上的实际文件创建日期_Macos_Perl_File - Fatal编程技术网

Macos 使用Perl读取Mac OS上的实际文件创建日期

Macos 使用Perl读取Mac OS上的实际文件创建日期,macos,perl,file,Macos,Perl,File,我想读取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上,每个文件都有两个日期:创建

我想读取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
将等于查找器中的“创建”日期,但它完全不同。做了一些研究,我发现大多数Unix操作系统都不存储这种数据,而Mac OS却存储这种数据


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

只需从
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:该模块是为此而开发的,但不幸的是,它在《山狮》中被破坏了。(安装过程中出错-至少在我的OS X上是这样)

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

stat -f %B _filename_
在perl中:

$_="filename"
print scalar localtime `stat -f %B $_`

ctime是最后一次更改,不是creation@stark
mtime
是最后一次修改时间
ctime
是最后一次
inode更改时间
。(上次访问的时间)。ctime是文件创建时间的许多倍(例如,在创建后未修改inode),您可以尝试使用某种FFI绑定到,并抓取
st_birthtimespec
字段。它工作得非常好,但是,我想分享一个性能注释:与使用
file::stat
相比,这个方法非常慢。@calvillo当然了——你每次都在进行一个新的过程——它非常慢。不幸的是,
MacOSX::File::Catalog
无法编译,
File::Stat
也无法返回OS X的文件创建日期。它是OSX扩展名,文件::Stat没有涵盖的内容(只有ctime、mtime、atime)。是的。。。那太糟糕了。您知道OSX在哪里存储这些附加信息吗?每个文件中都有吗?或者在单独的文件或数据库中?这比公认的答案方便得多(因为返回了Unix时间戳),如果只对创建日期感兴趣,可能也会更快。非常感谢!我还想指出的是,这将适用于单个目录中的所有文件和目录,只需添加一个星号,如so
directory/*