File size: 1,507 Bytes
2613ced
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
set -euo pipefail

SRC_BASE="/work/jf381/checkpoints"
DST_BASE="/work/jf381/code/FST/checkpoints"

# dry-run: 1 = print only; 0 = actually perform cp
DRY_RUN=0

shopt -s nullglob

for src_folder in "$SRC_BASE"/*; do
  [ -d "$src_folder" ] || continue
  foldername="$(basename "$src_folder")"
  echo "---- 处理: $foldername ----"

  # 找到匹配 recent_epoch_* 的条目(可能为文件或目录)
  matches=( "$src_folder"/recent_epoch_* )

  # 如果没有真实匹配(保留 nullglob 行为),数组可能为单个字面匹配,检查并跳过
  if [ ${#matches[@]} -eq 0 ] || { [ "${matches[0]##*/}" = "recent_epoch_*" ] && [ ${#matches[@]} -le 1 ]; }; then
    echo "  在 $src_folder 未找到 recent_epoch_*,跳过。"
    continue
  fi

  dest_recent_dir="$DST_BASE/$foldername"
  echo "  目标 recent 目录: $dest_recent_dir"

  if [ "$DRY_RUN" -ne 0 ]; then
    echo "  (dry-run) 将创建: mkdir -p \"$dest_recent_dir\""
    for m in "${matches[@]}"; do
      echo "  (dry-run) 将复制: \"$m\" -> \"$dest_recent_dir/\""
    done
  else
    mkdir -p "$dest_recent_dir"
    for m in "${matches[@]}"; do
      # 使用 cp -a 保留权限/时间戳/链接等
      # 若目标已存在同名目录/文件,cp -a 会把源放到目标目录中(覆盖内部同名文件)
      echo "  复制: \"$m\" -> \"$dest_recent_dir/\""
      cp -a -- "$m" "$dest_recent_dir/"
    done
    echo "  完成复制。"
  fi
done

echo "全部处理完毕. DRY_RUN=$DRY_RUN"