如何在脚本中对 gzip 日志文件进行正则表达式

How to Regex in a script to gzip log files

我想 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

我已经尝试了一些使用正则表达式的变体但没有成功,你能看到我代码中的简单错误吗? 提前致谢

为什么不制作 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.

我做到了:

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

它对我有用。