先参看别人的情况
ls -l命令显示的格式不一致
以下四行,中间的二行日期时间显示与前后不一致:-rw-r--r-- 1 toptest tiptop 5320 2006-05-07 abmi601.per
-rw-r--r-- 1 toptest tiptop 2022 12月 12 16:37 abmi710b.per
-rw-r--r-- 1 toptest tiptop 5116 6月 6 20:40 abmq500.per
-rw-r--r-- 1 toptest tiptop 4970 2006-09-20 abmq500.per060920
导致下面的命令抓到的参数时而正确时而为空
ermnewtmp=`ls -l --sort=time -r erm*.jar | awk '{print $9}'`
分析原因:
本以为系统会根据文件创建年限不一样而显示时间不一样,最后在别的Linux机器上ls -l 后发现不是这么回事。我也没再深究具体原因。
解决办法:
通过参数格式化显示日期的类型
ls -l --time-style=+%Y-%m-%d-%T | sort -k 6
按时间 反向排序
-rwxrwxrwx 1 root root 14364 2008-10-13-08:56:11 update.log
ls -l --time-style=+%Y-%m-%d-%T | sort -r -k 6
按大小从大到小排序
最后将脚本语句由
ermnewtmp=`ls -l --sort=time -r erm*.jar | awk '{print $9}'`
改为
ermnewtmp=`ls -l --time-style=+%Y-%m-%d-%T --sort=time -r erm*.jar | awk '{print $7}'`
我的情况是要把文件的生成日期写入日志,原本直接用stat函数,但输出没有按照需求格式,生成日期格式YYYYMMDDHH24MISS
man ls后 --time-style参数跟date的format是一样的,那就简单多了,datestr="`ls --time-style=+%Y%m%d%H%M%S`"