| # --- 配置区 --- | |
| LOG_DIR="/workspace/echoloc/Dataset/VStyle/sft/logs/" | |
| KEEP_X=5 # 每种类型保留的数量 | |
| # -------------- | |
| cd "$LOG_DIR" || { echo "错误: 目录不存在"; exit 1; } | |
| echo "正在清理日志(每组保留最近 $KEEP_X 个)..." | |
| # 1. 提取所有唯一的 "前缀" 和 "后缀" 组合 | |
| # 逻辑:将 train_42018.out 拆分为 "train" 和 "out" | |
| # 使用 sed 将 _数字. 替换为空格,方便 read 读取 | |
| ls -1 | grep -E '_[0-9]+\.[a-z0-9]+$' | sed -E 's/_([0-9]+)\.([a-z0-9]+)$/ \2/' | awk '{print $1, $2}' | sort -u | while read -r prefix ext; do | |
| # 2. 根据前缀和后缀,匹配所有对应的文件 | |
| # 比如:ls -t train_* .out | |
| # 注意:这里需要精准匹配结尾 | |
| # 构造匹配模式,例如 train_[0-9]*.out | |
| pattern="${prefix}_[0-9]*.${ext}" | |
| # 获取文件列表,按时间排序(最新在前) | |
| files=$(ls -t $pattern 2>/dev/null) | |
| if [ -z "$files" ]; then | |
| continue | |
| fi | |
| count=$(echo "$files" | wc -l) | |
| if [ "$count" -gt "$KEEP_X" ]; then | |
| echo "发现组 [$prefix + .$ext]: 共 $count 个,保留 $KEEP_X 个" | |
| # 提取需要删除的文件名 | |
| to_delete=$(echo "$files" | tail -n +$((KEEP_X + 1))) | |
| # 执行删除 | |
| echo "$to_delete" | xargs -d '\n' -r rm -- | |
| else | |
| echo "发现组 [$prefix + .$ext]: 共 $count 个,无需处理" | |
| fi | |
| done | |
| echo "---------------------------------------" | |
| echo "清理完成!" | |