想请教朋友们,服务器是:Linux RHEL6.4,日志的目录结构是:
logs1目录下:
20220101目录
A目录
WebAccess.log
SendDataStatus.log
B目录
WriteData.log
DataExecute.log
VisitPage.log
20220102目录
20220103目录
所有日志的内容都是下面的格式:
2023-01-18 18:13:19,272 abcdefg<日志内容>
2023-01-18 18:25:30,755 abcdefg<日志内容>
2023-01-18 19:35:30,444 abcdefg<日志内容>
我想到日志中的开始时间就是文件创建时间,结束时间就是文件的修改时间,所以,用这2个时间或取日志中的首行和尾行的时间都行,但LInux知识很缺乏,所以请朋友们指点,非常感谢您!
需求:在生产环境中,不能用.sh脚本,可用linux命令,想得到每个日志文件名及此文件中对应的开始和结束时间,文件名是logs1目录后的路径即可,最好还有“执行时间",执行时间其实就是“结束时间 - 开始时间”,最终需要这样的数据:
文件名 日志中的开始时间 结束时间
logs1/20220101/A/WebAccess.log 2023-01-18 18:13:19 2023-01-18 18:25:30
logs1/20220102/B/WriteData.log 2023-01-18 18:13:19 2023-01-18 18:25:30
logs1/20220103/C/DataExecute.log 2023-01-18 18:13:19 2023-01-18 18:25:30
然后将这样的数据生成到一个文件中。
可以使用 find 命令来递归查找目录下的所有文件,并使用 xargs 命令来执行对于每个文件所需要的操作。
可以使用以下命令来查找所有的日志文件
find logs1 -name "*.log" -print
可以使用 xargs 命令来对于每个文件执行操作,如读取首行和尾行的时间并计算执行时间,可以使用下面的命令
find logs1 -name "*.log" -print0 | xargs -0 -I {} bash -c 'echo {}; head -n 1 {} | awk "{print \$1,\$2}"; tail -n 1 {} | awk "{print \$1,\$2}"'
这个命令会输出文件名,文件首行时间,文件尾行时间。
如果想将这些数据保存到文件中,可以使用重定向符号 > 将输出重定向到文件中。
find logs1 -name "*.log" -print0 | xargs -0 -I {} bash -c 'echo {}; head -n 1 {} | awk "{print \$1,\$2}"; tail -n 1 {} | awk "{print \$1,\$2}"' > output.txt
这样就可以将输出保存到output.txt文件中。
请注意,这些命令的结果可能与那的文件系统和日志文件的格式有关。如果出现错误或不符合预期,请检查文件系统和日志文件的格式。