File size: 2,384 Bytes
92dbe65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""删除 ``jobs_extract_archives.py`` 在 ``--out-root`` 下生成的 ``_wjad_extract_state`` 目录。

只删「已解压」进度标记,**不会**删除 ``extracted/`` 里真正的数据集文件。
删完后可重新跑解压脚本,会按归档从头再解压一遍(若目录已存在可能覆盖/混合,按需先清 extracted)。

用法示例::

    # 本机 / Bucket 挂载路径与解压时 --out-root 一致
    python scripts/clear_wjad_extract_state.py --out-root /mnt/wjad/extracted/cosmos_hub

    # 只看会删什么,不真删
    python scripts/clear_wjad_extract_state.py --out-root F:/bucket/extracted/cosmos_hub --dry-run

环境变量(可选)::

    设置 WJAD_EXTRACTED_ROOT 后可省略 --out-root

    Linux Job::

        export WJAD_EXTRACTED_ROOT=/mnt/wjad/extracted/cosmos_hub
        python scripts/clear_wjad_extract_state.py
"""

from __future__ import annotations

import argparse
import os
import shutil
import sys
from pathlib import Path

STATE_DIRNAME = "_wjad_extract_state"


def main() -> None:
    p = argparse.ArgumentParser(description="Remove _wjad_extract_state under extracted out-root.")
    p.add_argument(
        "--out-root",
        type=Path,
        default=None,
        help="与 jobs_extract_archives --out-root 相同;不设则用环境变量 WJAD_EXTRACTED_ROOT",
    )
    p.add_argument("--dry-run", action="store_true", help="只打印路径,不删除")
    args = p.parse_args()
    out = args.out_root
    if out is None:
        env = os.environ.get("WJAD_EXTRACTED_ROOT")
        if not env:
            print(
                "需要 --out-root 或环境变量 WJAD_EXTRACTED_ROOT",
                file=sys.stderr,
            )
            sys.exit(2)
        out = Path(env)
    out = out.resolve()
    state = out / STATE_DIRNAME
    if not state.exists():
        print(f"[clear] 不存在,跳过: {state}")
        return
    if not state.is_dir():
        print(f"[clear] 不是目录,拒绝: {state}", file=sys.stderr)
        sys.exit(1)
    print(f"[clear] {'(dry-run) ' if args.dry_run else ''}目标: {state}")
    if args.dry_run:
        n = sum(1 for _ in state.rglob("*"))
        print(f"[clear] dry-run: 其下约 {n} 个条目(含文件与目录)")
        return
    shutil.rmtree(state)
    print(f"[clear] 已删除: {state}")


if __name__ == "__main__":
    main()