Linux下如何列出指定文件名及之后的所有文件
如何筛选出my-app.001219及之后的文件?
你在Linux环境中执行ls -la /var/lib/my-app/my-app*得到了一系列带递增6位数字后缀的文件,现在需要提取出my-app.001219及之后的所有文件,这里有几个简单实用的实现方法:
方法1:利用字符串比较快速过滤
直接通过awk对文件名路径进行字符串比较,因为所有目标文件的前缀路径完全一致,后缀是固定长度的数字,字符串比较的结果和数字大小判断一致,命令如下:
ls -la /var/lib/my-app/my-app* | awk '$NF >= "/var/lib/my-app/my-app.001219"'
原理:$NF代表ls输出每行的最后一列(也就是完整的文件路径),直接和目标文件路径做字符串比较,满足条件的行就会被打印出来。
方法2:提取后缀数字做精确判断
如果担心字符串比较可能出现的特殊情况(比如后缀长度不统一),可以用awk提取出后缀的数字部分再做数值判断:
ls -la /var/lib/my-app/my-app* | awk '{split($NF, parts, "."); if (parts[3] >= 1219) print $0}'
原理:split($NF, parts, ".")把文件路径按.分割成数组,parts[3]就是后缀的数字部分(比如001219),直接做数值比较后输出符合条件的行。
方法3:用find命令实现(更适合大量文件场景)
如果目录下文件数量很多,用find结合shell命令来筛选更高效:
find /var/lib/my-app -maxdepth 1 -type f -name "my-app.*" -exec sh -c 'num=${0##*.}; if [ $num -ge 1219 ]; then ls -ld "$0"; fi' {} \;
原理:find先定位到目标目录下所有符合my-app.*命名的文件,然后对每个文件执行shell脚本,用${0##*.}提取后缀数字,判断数值大于等于1219后,用ls -ld输出详细信息。
内容的提问来源于stack exchange,提问作者avisheks
相关产品推荐
相关产品推荐

