find
find ./ -name "*.log" -type f -printf "%T@ %p\n" | sort -n | tail -2
其中,/path/to/search是要搜索的目录,可以根据实际情况进行替换。
该命令的作用如下:
find /path/to/search -name "*.log" -type f:在/path/to/search目录下搜索以log结尾的文件,并且只搜索文件(排除目录)。-printf "%T@ %p\n":将搜索到的文件按照修改时间进行输出,输出格式为”时间戳 文件路径”,以便后续进行排序。sort -n:按照时间戳进行排序,由于时间戳是浮点数,因此需要使用-n选项进行数字排序。tail -2:取排序后的最后两个文件,即最近修改的两个文件。cut -f2- -d" ":去掉文件路径前面的时间戳,只输出文件路径。
请注意,在以上命令中,时间戳越小表示文件修改时间越早,因此排序后取最后两个文件即可得到最近修改的两个文件。
printf
-printf选项可以指定多个格式化字符串来输出不同的信息,下面列出一些常用的格式化字符串:
%p:输出文件的路径名。%s:输出文件的大小,以字节为单位。%f:输出文件名,不包括路径。%m:输出文件的权限。%u:输出文件的所有者。%g:输出文件的所有者所在的组。%D:输出文件的所在目录路径名。%n:输出符号链接指向的文件名。%h:输出符号链接所在的目录路径名。%Y:输出符号链接指向的文件类型。%Z:输出符号链接指向的文件的安全上下文。
不同的文件系统对文件的时间戳信息存储方式不同,因此%C@和%T@的含义也略有不同。
在大多数常见的Linux文件系统中(如ext2/3/4、NTFS等),文件的时间戳信息包括:
- 修改时间(modification time):文件内容最后一次被修改的时间戳。
- 访问时间(access time):文件最后一次被访问的时间戳。
- 状态改变时间(change time):文件元数据最后一次被修改的时间戳,包括文件权限、所有者等信息。
在这些文件系统中,%T@表示的是文件的修改时间,而%C@表示的是文件的状态改变时间。因此,它们的含义不完全相同,但是在大多数情况下,它们的差异不会对结果产生重大影响。
但是,对于一些支持Btrfs、XFS等新一代文件系统的系统,文件系统会记录文件的创建时间。在这些文件系统中,%T@和%C@都无法输出文件的创建时间戳,必须使用%Tc或%Cc来输出文件的创建时间。

发表回复