如何从Shell中获取第二新修改的文件名?
获取第二新修改文件的简洁方法
你可以用更简洁的管道组合实现,无需用到tac:
ls -tr | tail -2 | head -1
逻辑很直接:ls -tr按修改时间从旧到新列出文件,tail -2提取最后两个(最新和第二新的文件),再用head -1取第一个结果,就是你要的第二新文件。
如果想减少管道调用次数,用awk一步完成更高效:
ls -tr | awk '{prev = $0} END {print prev}'
awk会遍历每一行内容,把当前行暂存到prev变量,到遍历结束的END阶段时,prev保存的就是倒数第二行的内容——也就是第二新的文件名。
补充说明:如果你的文件名包含换行符(这种场景极少),ls的纯文本输出会出现异常,这种情况建议用find结合stat处理,但日常普通场景下上面的方法完全够用。
内容的提问来源于stack exchange,提问作者SirLouen
相关产品推荐
相关产品推荐

