# Find current month with GNU Date
current_month="$(date -d `date +%Y-%m`-01)"
# Find files from current month.
for file in $(find /var/log -type f -newerct "$current_month"); do
echo -n "${file}: "
case "$file" in
*gz) zcat "$file" | wc -l ;;
*) wc -l < "$file" ;;
esac
done
4 回答
要获取本月编写的行的行号,您需要基于文件的输出格式 .
我们可以想象这些线条看起来像这样:
Dec 23 22:15:14 ubunix kernel: [ 2320.727997] 8139too 0000:01:04.0: eth0: link down
然后你只需要做一些事情:
date +%b
输出当月的缩减(Dec
) .但是,这只适用于像我的例子那样形成的行 . 您需要根据实际输出格式调整
grep
模式 . 在阅读man date
之后,您可能会找出正确的date
参数 .使用GNU查找和GNU日期
假设您使用logrotate之类的工具旋转日志,您可以跳过检查每一行的日期,只需检查日志文件本身的ctime . 例如,如果您每天午夜轮换日志,则可以使用GNU查找和GNU日期查找当月的文件 . 最棘手的部分是您需要以与未压缩日志不同的方式处理压缩日志 . 在以下代码中,这是使用Bash case语句完成的 .
按照devnull的建议调查man wc . 我系统的输出如下 .
您现在仍然知道
/var/log/kern.log
中的日期格式,但是如果它以Dec 5
之类的东西开头,那么您可以使用这个简单的grep -c
来计算今天的行: