#!/bin/bash # 默认值 FILE_DIR="." FILE_SUFFIXES="log" # 解析命令行选项 while getopts "d:s:h" opt; do case $opt in d) FILE_DIR=$OPTARG ;; s) FILE_SUFFIXES=$OPTARG ;; h) echo "$0 用于递归清理指定目录下的非当天日志文件,仅保留当日新生成或修改的日志文件" >&2 echo "[-d 指定要清理的目录路径,默认当前路径]" >&2 echo "[-s 指定后缀名清理对应的日志文件,多个后缀名用逗号隔开,默认后缀名 log]" >&2 exit 0 ;; \?) echo "无效的选项: -$OPTARG" >&2 exit 1 ;; :) echo "选项 -$OPTARG 需要一个参数." >&2 exit 1 ;; esac done # 检查目录是否存在 if [ ! -d "$FILE_DIR" ]; then echo "错误:目录 '$FILE_DIR' 不存在。" exit 1 fi # 获取今天的日期,格式为YYYY-MM-DD TODAY=$(date +%Y-%m-%d) # 将逗号分隔的后缀转换为数组 IFS=',' read -r -a SUFFIX_ARRAY <<< "$FILE_SUFFIXES" # 递归查找并删除非当天的日志文件(仅保留当日新生成或修改的文件) for SUFFIX in "${SUFFIX_ARRAY[@]}"; do find "$FILE_DIR" -type f -name "*.$SUFFIX*" ! -newermt "$TODAY" -exec rm -f {} \; done echo "已完成清理,仅保留了$TODAY的日志文件。"