鉴于
- 目录
- sh 模式直接在此目录中生成文件子集(如 *.log)
- sh 模式可以根据文件名
获取按模式过滤的每个文件的最快方法是什么(在 ksh 中):
- 其名称
- 最后修改的日期和时间(即附加的文本)
- 创建日期和时间(假设它是在我们访问它的目录中创建的)
理想情况下,它可以同时在以下两个方面发挥作用:
- AIX 6100-04-03-1009
- Linux 2.6.18
- SunOS 5.10
答案1
Posix文件系统节点通常具有三个时间属性:
atime
(访问时间)——文件上次读取的时间mtime
(修改时间)——上次写入时间。ctime
(更改时间)——其 inode(元数据)何时发生更改。
该ctime
属性经常被误解为创建时间,有时确实如此,这往往会使人们感到困惑。
POSIX shell 没有提取这三个属性的标准方法,您将依赖命令ls
。 ls -l $file
默认情况下显示修改时间。
ls -lc $file
节目ctime
ls -lu $file
节目atime
ls --time-style=full-iso
如果您使用的是 GNU/linux 系统,建议使用或其他 iso 格式以获得一致的输出。
在 Perl 和其他脚本语言中,stat()
文件并访问其属性。Perl 甚至有-M
、、-A
和-C
运算符,它们为文件系统对象返回mtime
、、atime
和ctime
。不过请注意时间偏移。Perl 倾向于报告相对于进程启动时间的时间。
答案2
抱歉没有为您编写 awk/sed,但该stat
命令将提供访问、修改和更改的时间。它将为您匹配。我不确定它是否在 AIX 中有效,我目前无法访问它。
答案3
这可能是 GNU 扩展,但 GNU find 对所有 3 个时间都有 printf 格式,不包括“出生”时间。(这需要 Linuxstatx
系统调用;当前版本的 coreutilsstat
可以获取所有 4 个时间)。
find -printf '%a \t%c \t%t \t%f\n'
将打印所有 3 次,例如
Tue Dec 8 07:49:12.3585942200 2020 Tue Dec 8 07:49:27.9582201460 2020 Tue Dec 8 07:49:27.9582201460 2020 ./foo.c
您可以使用%A
k(其中 k 是格式说明符,与 ctime 和 mtime 相同)以不同的格式打印。请参阅Linux 手册页
https://www.unix.com/man-page/posix/1p/find/-printf
根本没有提到,所以您可能需要perl
其他非 POSIX 工具。