如何从服务器中查找特定时间的特定日志并仅压缩该时间的日志

如何从服务器中查找特定时间的特定日志并仅压缩该时间的日志

我有一个针对上述问题的命令。有人能解释一下下面的命令吗?

DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done

答案1

您所指的脚本写得一点都不好,可能无法按您预期的方式工作。

以下是其具体操作细节:

日期=date +%m%d%Y-%H%M%S

将当前日期以“10192016-171249”之类的格式存储在 DATE 中。有关详细信息,请参阅“man date”。顺便说一句,这不是存储日期/时间的最佳方式。出于快速参考/排序的原因,日期部分最好使用 YYYYMMDD 格式。

ls -lt *.log*

这将获取当前目录中与模式“*.log*”匹配的所有文件的目录列表。例如,它可能类似于:

-rw-r--r-- 1 root root  174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm      414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root     209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root    1333 Apr  9  2015 pm-powersave.log.1

grep "10月11日"

然后它仅“提取”存在“Oct 11”的行,结果如下:

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

grep -E '12:|13:|14:

然后它再次提取仅存在“12:”或“13:”或“14”的数据:(再次做得很差,因为这适用于小时字段,也适用于分钟和秒字段)

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

awk'{打印$9}'

从剩余的行中,它提取第 9 个元素(文件名):

fontconfig.log

压缩日志hostname_ _${DATE}.zip $i

使用上述命令的“for”循环,将每个文件添加到名为以下名称的 zip 文件中:

logs_`hostname`_${DATE}.zip

其中hostname是主机名,而“${DATE}”是之前存储的日期。因此,如果您的主机名为 BLUERAY,并使用上面的日期,您将获得一个名为的文件:

logs_BLUERAY_10192016-171249.zip

再说一遍,这个脚本写得很糟糕,你当然不应该使用它(或同一作者编写的任何其他脚本)来学习如何编写脚本......

相关内容