shell脚本,保留多个web程序三天的error、info、warn日志,其他均删除
时间: 2023-11-28 13:48:03 浏览: 70
可以使用 `find` 命令来进行文件查找和删除操作,结合 `-mtime` 参数可以指定查找和删除的时间范围。
假设日志文件都存放在 `/var/log/web` 目录下,且每个程序的日志文件名格式为 `program_name.log`,那么可以使用以下脚本来实现:
```shell
#!/bin/bash
LOG_DIR=/var/log/web
THRESHOLD_DAYS=3
for log_file in $LOG_DIR/*.log; do
# 获取文件名和程序名
file_name=$(basename $log_file)
program_name=${file_name%%.*}
# 保留指定级别的日志
for level in error info warn; do
find $LOG_DIR -name "$program_name.*.$level" -mtime -$THRESHOLD_DAYS -type f -exec echo "Keeping {}" \;
done
# 删除其它级别的日志
find $LOG_DIR -name "$program_name.*" ! -name "*.error" ! -name "*.info" ! -name "*.warn" -mtime +$THRESHOLD_DAYS -type f -delete -exec echo "Deleting {}" \;
done
```
这里使用了 `basename` 命令来获取日志文件名,然后使用 `${file_name%%.*}` 来获取程序名。接着使用 `find` 在目录中查找指定级别的日志,使用 `-mtime -$THRESHOLD_DAYS` 参数表示只保留三天内的日志,将找到的日志文件输出到控制台。然后再使用 `find` 删除其它级别的日志,使用 `! -name` 参数来排除指定的文件名,同时使用 `-mtime +$THRESHOLD_DAYS` 参数表示删除三天前的日志文件,将删除的日志文件输出到控制台。
注意,为了安全起见,建议在测试通过后再将 `-delete` 参数添加到 `find` 命令中来实际删除日志文件。
阅读全文