要仅获取最旧文件的名称,
ls -lt | awk '/^-/{file=$NF}END{print file}'
但是,如果您的文件名称中有空格等,这并不可靠。通常,您应该尽量避免解析来自ls
.
stat
您可以获得机器可读格式的文件创建日期,以自 1970 年 1 月 1 日以来的秒数表示;与date +%s
您可以以相同的格式获取当前时间。减去并除以 60。(更多的 Awk 技能会派上用场算术。)
最后,对于替代解决方案,请查看find
; 特别是,它的printf
格式字符串允许您提取文件的年龄。以下将直接为您提供最旧文件的以秒为单位的年龄和 inode 编号:
find . -maxdepth 1 -type f -printf '%T@ %i\n' |
sort -n | head -n 1
使用 inode 号避免了有趣的文件名问题;一旦你有一个 inode,将其转换为文件名是一件轻而易举的事:
find . -maxdepth 1 -inum "$number"
将两者结合在一起,你可能想要这样的东西:
# set -- Replace $@ with output from command
set -- $(find . -maxdepth 1 -type f -printf '%T@ %i\n' |
sort -n | head -n 1)
# now $1 is the timestamp and $2 is the inode
oldest_filename=$(find . -maxdepth 1 -inum "$2")
age_in_minutes=$(date +%s | awk -v d="$1" '{ print ($1 - d) / 60 }')