我有一台 Mac,需要创建给定目录及其子目录中所有文件内容的列表,以及每个文件的“创建”、“添加”、“修改”和“上次打开”日期。
查看各个线程,我可以看到如何使用“ls”或“stat”命令获取创建/添加/修改数据,但我看不到任何递归获取所有文件的上次打开日期信息的方法。
答案1
- 创建:虽然不是 UNIX 中包含的原始文件属性之一,但该属性在当今的许多文件系统上都可用(包括与 MacOS、HFS+ 最相关的),并且现代版本的工具如
ls
和stat
知道如何访问它:ls -U
、stat
使用B
(已记录)在联机帮助页中)。 - 添加: 这本身并不存在。您可以使用包含文件的目录的上次修改时间来了解该目录的上次修改时间,即文件被添加(创建或移入)、删除(删除或移走)或重命名。但您不知道是哪一个,并且只能获得有关最近事件的信息。
- 修改的和上次访问时间:这些是 UNIX 中文件的原始统计信息。大多数文件系统和基本上所有工具都支持它们:
ls -u
、stat
使用a
和m
(再次,如文档所述)。请注意,为了保存每次文件访问时的磁盘写入,有时会关闭或有条件地关闭上次访问时间戳跟踪。
还有一个你没有提到的,那就是上次索引节点更改。这会跟踪文件元数据(而不是文件内容)上次更改的时间。
答案2
您可以使用stat
命令列出有关文件的信息。此命令可以列出操作系统为文件记录的所有四个时间戳:
%a
:访问时间(atime)。这是文件最后一次打开或以其他方式读取(例如分析或索引其内容)。%m
:修改时间(mtime)。这是文件内容最后一次修改。如果文件是从其他地方复制或下载的,则其 mtime 是否在复制时更新取决于复制的方式。%c
:inode 更改时间 (ctime)。每当文件发生除读取之外的任何情况时,此时间都会更新:修改、重命名、移动、更改权限等。%B
:出生时间(创建时间)。这通常是创建或下载文件的时间,但对于某些应用程序,这可能反映了上次保存文件的时间。
您可以将它与find
命令递归列出文件。例如,要列出当前目录下所有常规文件的时间戳和名称,您可以使用:
find . -type f -exec stat -f '%Sa %Sc %Sm %SB %N' {} \;