Linux bash脚本-从文件夹中选择的文件打印X行
我正在尝试编写一个脚本,帮助跟踪我的应用程序日志 我的应用程序的日志以以下模式写入“var/log/MyLogs/”:Linux bash脚本-从文件夹中选择的文件打印X行,linux,bash,Linux,Bash,我正在尝试编写一个脚本,帮助跟踪我的应用程序日志 我的应用程序的日志以以下模式写入“var/log/MyLogs/”: runningNumber_XXX.txt , for example: 0_XXX.txt 37_xxx.txt 99_xxx.txt 101_xxx.txt 103_xxx.txt 我正在尝试编写一个bash脚本(目前尚未成功),它将打印最后一个日志文件的最后20行(最后一个日志文件是前缀号最大的文件) 我知道我需要检查文件夹中的文件(对于/var/log/MyLogs/
runningNumber_XXX.txt , for example:
0_XXX.txt
37_xxx.txt
99_xxx.txt
101_xxx.txt
103_xxx.txt
我正在尝试编写一个bash脚本(目前尚未成功),它将打印最后一个日志文件的最后20行(最后一个日志文件是前缀号最大的文件)
我知道我需要检查文件夹中的文件(对于/var/log/MyLogs/*中的文件),检查哪个文件名的前缀最大,然后打印所选文件的最后20行
请帮帮我
谢谢
find /var/log/MyLogs -iname '*_xxx.txt' | sort -n | tail -1 | xargs tail -20
- 获取正确的文件
- 按数字排序
- 获取最后一个日志文件
- 最后20行
tail-20$(ls-1/var/log/MyLogs/*.*.*.*.txt | sort-n-t.-k 1-r | head-1)
在shell脚本中使用ls
通常是不好的做法,但如果您可以确保日志文件不包含空格和其他奇怪字符,您可以使用一个简单的:
tail -20 $(ls -t1 /var/log/[0-9]*_XXX.txt | head -1)
委员会:
对文件进行排序我的最新修改时间排在第一位ls-t
第一个头
打印最后一行tail
同样,这通常是一种不好的做法,只有当你知道自己在做什么时,你才能使用它。谢谢(但如果我有:99_xxx.txt和103_xxx.txt,它会给我99_xxx.txt的内容)。@user3668129
-n
的标记使它将排序键视为一个数字,而不是字符串。从技术上讲,此解决方案不是100%正确的。文件名可能不仅包含空格(这是您与@Vijay讨论的主要原因),还包含那些“奇怪的符号”,包括“\n”。因此正确的解决方案意味着find-print0
和随后在输出流中处理“\0”的“舞蹈”(xargs-0
在某些情况下会有所帮助,但无排序
,无尾部
等)。但正如@Vijay合理地说的,日志文件名通常不包含任何“坏符号”,因此在这种特殊情况下,所有这些预防措施都是过度的。虽然我不会否决你的意见,但这很好。
tail -20 $(ls -t1 /var/log/[0-9]*_XXX.txt | head -1)