需求
- 服务器中的日志文件太大,存储空间有限。
- 按照(当月)月份进行日志归类。
前置知识
- 正则表达式
- shell命令wait
解决
# 按需修改路径
base_dir="/opt/soft/xx/logs"
cur_year=`date +%Y`
source_dir=$base_dir
target_dir="${base_dir}/`date +%Y-%m`"
# 日志格式:server_2022-09-21_1
log_list=$(ls ${source_dir} | egrep "server_${cur_year}-[0-9]{2}-[0-9]{2}_[1-4]\.log$")
zip_log_fun() {
for log in $log_list
do(
if [ -f "${target_dir}/${log}.gz" ]; then
echo "存在文件${target_dir}/${log}.gz, 不需要在压缩"
else
echo "start zip ${base_dir}/${log}"
# echo ${base_dir}/${log: 7: 7}/${log}.gz
gzip -c ${base_dir}/${log} > "${base_dir}/${log: 7: 7}/${log}.gz"
fi
)&
done
wait
echo "end zip"
}
# 创建日志存储目录
if [ ! -d $target_dir ]; then
echo "创建${server}目录...";
mkdir $target_dir
fi
zip_log_fun &
wait
后续
可以将以上shell脚本做成定时任务