我在一个文件夹中有一堆日志文件.当我进入文件夹并查看文件时,它看起来像这样.
$ ls -lhat
-rw-r--r-- 1 root root 5.3K Sep 10 12:22 some_log_c48b72e8.log
-rw-r--r-- 1 root root 5.1M Sep 10 02:51 some_log_cebb6a28.log
-rw-r--r-- 1 root root 1.1K Aug 25 14:21 some_log_edc96130.log
-rw-r--r-- 1 root root 406K Aug 25 14:18 some_log_595c9c50.log
-rw-r--r-- 1 root root 65K Aug 24 16:00 some_log_36d179b3.log
-rw-r--r-- 1 root root 87K Aug 24 13:48 some_log_b29eb255.log
-rw-r--r-- 1 root root 13M Aug 22 11:55 some_log_eae54d84.log
-rw-r--r-- 1 root root 1.8M Aug 12 12:21 some_log_1aef4137.log
Run Code Online (Sandbox Code Playgroud)
我想查看最新日志文件中的最新消息.我现在可以手动复制最新日志的名称,然后对其执行尾部,这将起作用.
$ tail -n 100 some_log_c48b72e8.log
Run Code Online (Sandbox Code Playgroud)
这确实涉及体力劳动,所以我想用bash-fu来做这件事.
我目前找到了这种方式;
filename="$(ls -lat | sed -n 2p | tail -c 30)"; tail -n 100 $filename
Run Code Online (Sandbox Code Playgroud)
它有效,但我很遗憾我需要将数据保存到变量中才能完成.是否可以在bash中执行此操作而不将中间结果保存到变量中?
tail -n 100 "$(ls -at | head -n 1)"
Run Code Online (Sandbox Code Playgroud)
您不需要ls实际打印时间戳,只需要按它们排序(ls -t).我添加了该-a选项,因为它在您的原始代码中,但请注意,除非您的日志文件是"点文件",否则这不是必需的,即以.(它们不应该).
使用ls这种方式可以避免使用sed和解析输出tail -c.(而且你应该不尝试分析的输出ls.)只需选择的第一个文件列表(head -n 1),这是最新的.将它放在引号中应该可以避免更常见的"问题",例如文件名中的空格.(如果文件名中有换行符或类似内容,请修复文件名.:-D)
您可以使用命令替换而不是保存到变量中.
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |