WJAD / scripts /clear_wjad_extract_state.py
fuzirui's picture
push_to_jobs: --replace-extracted; cache/pip/tmp on bucket
92dbe65 verified
"""删除 ``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()