我认为新的file.info
很可能是最好的选择。如果R-3.3.3不能满足您的需求(或者在此期间,如果可以),您可以尝试通过利用stat
通常安装在基本操作系统中的事实来绕过它(我没有在Mac上测试):
as.POSIXct(system2("stat", args = c("-c", "%y", "my_file.txt"), stdout = TRUE))
这可以用一个函数来形式化,它可以为您完成更多的工作:
my_mtime <- function(filenames, stat = c("modified", "birth", "access", "status"),
exe = Sys.which("stat")) {
if (! nzchar(exe)) stop("'stat' not found")
stat <- switch(match.arg(stat), birth = "%w", access = "%x", modified = "%y", status = "%z")
filenames <- Sys.glob(filenames)
if (length(filenames)) {
outs <- setNames(system2(exe, args = c("-c", stat, shQuote(filenames)), stdout = TRUE),
nm = filenames)
as.POSIXct(outs)
}
}
my_mtime("[bh]*")
如果你要求 file.mtime
,我假设“修改”对你来说最有趣,但是也很容易包括其他一些文件时间戳:
my_mtime("[bh]*", stat="birth")
my_mtime("[bh]*", stat="status")
请注意,缺少小数秒是打印的副产品(正如您所述),可以通过以下方法解决:
x <- my_mtime("[bh]*", stat="status")
x
options(digits.secs = 6)
x
class(x)
更新: 在Mac上测试后,我确认了一些事情(感谢@HongOoi的提示):(1) stat
确实不同,不支持相同的命令行选项,因此需要更新此脚本; (2) 这个答案表明文件系统甚至没有存储文件时间的亚秒分辨率。如果您的文件系统类型是HFS +,我认为这里可能无法做任何事情。如果底层文件系统不同,则可能会获得更好的结果。
的确,Windows没有附带stat
可执行文件。然而,一些人认为在分析/开发工具包中使用Git for Windows是必需的,并且它确实有/Program Files/Git/usr/bin/stat.exe
。(实际上,我上面的hack是在Windows上编写的,在Ubuntu上进行了第二次测试。)
总之,不幸的是,根据您的文件系统类型,您可能无法在MacOS上获得所需的内容。我无法获得安装的stat
以提供亚秒分辨率(即使使用不同的参数),这表明我引用的四年前的答案没有改变。