我想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
我尝试了一些使用正则表达式的变量,但没有成功,你能看到我的代码中的简单错误吗? 谢谢你的推荐
答案 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]"
它对我有用。