File size: 1,484 Bytes
d8bfe4a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash

# --- 配置区 ---
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 "清理完成!"