如何在脚本中使用正则表达式来压缩日志文件

时间:2015-09-29 06:53:01

标签: regex linux bash gzip

我想gzip日志文件,但我无法弄清楚如何在我的命令中运行正则表达式。

我的日志文件看起来像这样,它们每小时滚动一次。

-rw-r--r-- 1 aus nds    191353 Sep 28 01:59 fubar.log.20150928-01
-rw-r--r-- 1 aus nds    191058 Sep 28 02:59 fubar.log.20150928-02
-rw-r--r-- 1 aus nds    190991 Sep 28 03:59 fubar.log.20150928-03
-rw-r--r-- 1 aus nds    191388 Sep 28 04:59 fubar.log.20150928-04

脚本。

FUBAR_DATE=$(date -d "days ago"  +"%Y%m%d ")
fubar_file="/apps/fubar/logs/fubar.log."$AUS_DATE"-^[0-9]"
/bin/gzip $fubar_file

我尝试了一些使用正则表达式的变量,但没有成功,你能看到我的代码中的简单错误吗? 谢谢你的推荐

2 个答案:

答案 0 :(得分:0)

为什么不使fubar_file数组保存匹配的日志文件名,然后单独使用循环gzip。然后假定AUS_DATE包含20150928

# FUBAR_DATE=$(date -d "days ago"  +"%Y%m%d ") # not needed for gzip
fubar_file=( /apps/fubar/logs/fubar.log.$AUS_DATE-[0-9][0-9] )
for i in ${fubar_file[@]}; do
    gzip "$i"
done

或者如果您不需要保留数组中的文件名以供以后使用,只需gzip带有for循环的文件:

for i in /apps/fubar/logs/fubar.log.$AUS_DATE-[0-9][0-9]; do
    gzip "$i"
done

或者,只需使用find来匹配文件,然后使用gzip

find /apps/fubar/logs -type f -name "fubar.log.$AUS_DATE-[0-9][0-9]" -execdir gzip '{}' +

注意:所有答案都假定AUS_DATE包含20150928

答案 1 :(得分:0)

我做了:

$ fubar_file="./fubar.log."${FUBAR_DATE%% }"-[0-9][0-9]"

它对我有用。

相关问题