[英]How to list the files using sort command but not ls -lrt command
我正在编写一个shell脚本来检查日志文件中的一些参数,如错误或异常,这些参数是在目录/ var / log中的最近2小时内生成的。 所以这是我使用的命令:
find /var/log -mmin -120|xargs egrep -i "error|exception"
它显示文件名列表及其相应参数(错误和异常),但文件列表不按时间顺序排列。 我的意思是输出是这样的(序列):
/var/log/123.log:RPM returned error
/var/log/361.log:There is error in line 1
/var/log/4w1.log:Error in configuration line
但是这3个日志文件的生成顺序是不同的。
/var/log>ls -lrt
Dec24 1:19 361.log
Dec24 2:01 4w1.log
Dec24 2:15 123.log
所以我想要输出相同的序列,我的意思是这样的:
/var/log/361.log:There is error in line 1
/var/log/4w1.log:Error in configuration line
/var/log/123.log:RPM returned error
我试过这个:
find /var/log -mmin -120|ls -ltr|xargs egrep -i "error|exception"
但它不起作用。 对此的任何帮助都非常感谢。
如果你的文件名没有任何特殊字符(比如换行符等),你只需要另外调用xargs
:
find . -type f -mmin -120 | xargs ls -tr | xargs egrep -i "error|exception"
或者,如果您的文件名包含所述特殊字符:
find . -type f -mmin -120 -print0 | xargs -0 ls -tr | xargs egrep -i "error|exception"
您可以使用-printf
参数添加修改时间,以find
,然后sort
,然后使用sed
删除修改时间:
find /var/log -mmin -120 -printf '%T@:%p\n' | sort -V | sed -r 's/^[^:]+://' | xargs egrep -i "error|exception"
find ... -printf '%T@:%p\\n'
打印出每个找到的文件( %p
通过从unix新纪元秒前缀)( %T@
;例如, 1419433217.1835886710
)和结肠分离器( :
),每个都在一个新的行( \\n
)。
sort -V
按修改时间自然地对文件sort -V
排序,因为它位于每一行的开头(例如, 1419433217.1835886710:path/to/the/file
)。
sed -r 's/^[^:]+://'
采用123456789.1234:path/to/the/file
格式的每一行123456789.1234:path/to/the/file
并删除修改时间,只留下文件路径path/to/the/file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.