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
来输出文件的创建时间。
发表回复