如何筛选近7天指定模式文件并按修改时间戳排序输出文件名
按修改时间排序筛选结果的实现方案
你已经用命令筛选出了符合条件的文件,要按修改时间戳排序的话,可以在现有命令基础上增加时间提取、排序和文件名提取的步骤,下面是两种可靠的实现方式:
方式一:用stat+sort处理(推荐,支持含空格的文件名)
直接在原命令后追加管道命令,提取文件时间戳并排序:
find /Source -name "TEST_*" -mtime -7 -print0 | xargs -0 grep -l "pattern" | xargs -0 stat -c "%Y %n" | sort -n | cut -d' ' -f2-
各部分作用:
stat -c "%Y %n":输出每个文件的Unix时间戳(精确到秒,对应修改时间)和文件名,格式为「时间戳 文件名」sort -n:按时间戳的数值从小到大排序(最早修改的文件在前),如果要最新修改的在前,换成sort -nrcut -d' ' -f2-:去掉开头的时间戳,只保留完整文件名(即使文件名含空格也能正确提取)
方式二:用ls排序(适合文件名无特殊字符的场景)
如果你的文件名不含空格、换行等特殊字符,也可以用ls直接排序:
find /Source -name "TEST_*" -mtime -7 -print0 | xargs -0 grep -l "pattern" | xargs ls -lt | awk '{print $9}'
ls -lt:按修改时间降序排列文件(最新的在前),如果要升序用ls -ltrawk '{print $9}':提取ls输出中的文件名部分(注意:如果文件名含空格,这个方法会出错)
内容的提问来源于stack exchange,提问作者ganesh B
相关产品推荐
相关产品推荐

