Tar运行日志文件unix

时间:2018-03-26 06:50:46

标签: unix zip tar

我有一个巨大的日志文件。我知道我可以在最后对它进行tar,但我希望文件在每10K行之后压缩,并确保没有数据丢失。

最终目标是停止增加文件大小并将其保持在特定限制。

只是示例代码: -

sh script.sh > log1.log &

现在,我想继续压缩log1.log,以便它永远不会超过特定的大小限制。

此致 阿沛

2 个答案:

答案 0 :(得分:1)

让文件为file.txt,然后你就可以: -

x=$(wc -l file.txt|cut -f 1 -d " ")
if [[ $x >> 10000 ]]
then
sed '1,10000d' file.txt > file2.txt
fi

之后只需zip file2.txt并删除file2.txt

答案 1 :(得分:0)

考虑使用拆分命令。它可以按行,字节,模式等分割。

split -l 10000 log1.log `date "+%Y%m%d-%H%M%S-"`

这将拆分名为" log1.log"的文件。到一个或多个文件。每个文件将包含不超过10,000行。这些文件的名称类似于20180327-085711-aa,20180327-085711-ab等。对于非常大的日志文件,您可以使用split' s -a参数,以便在文件后缀中使用两个以上的字符

棘手的部分是你的shell脚本仍在写入文件。拆分内容后,必须截断日志。请注意,在拆分文件和截断文件之间存在一小段时间,因此某些日志记录数据可能会丢失。

此示例分为50,000个行文件:

$ wc log.text
  528193 1237600 10371201 log.text
$ split -l 50000 log.text `date "+%Y%m%d-%H%M%S-"` && cat /dev/null > log.text
$ ls
20180327-090530-aa      20180327-090530-ae      20180327-090530-ai
20180327-090530-ab      20180327-090530-af      20180327-090530-aj
20180327-090530-ac      20180327-090530-ag      20180327-090530-ak
20180327-090530-ad      20180327-090530-ah      log.text
$ wc 20180327-090530-aa
   50000  117220  982777 20180327-090530-aa

如果您只想在文件达到特定大小(行数)时截断该文件,请将此split命令包装在定期运行的shell脚本中(例如通过cron)。这是检查文件大小的示例:

if (( `wc -l < log.text` > 1000000 ))
then
    echo time to truncate
fi