29 lines
883 B
Python
29 lines
883 B
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
from .exact import exact_dedupe
|
|
from .scanner import scan
|
|
from .watcher import watch
|
|
|
|
|
|
def main() -> None:
|
|
p = argparse.ArgumentParser(prog="am-deduper")
|
|
sub = p.add_subparsers(dest="cmd", required=True)
|
|
for name in ("scan", "dedupe", "reconcile", "watch"):
|
|
sp = sub.add_parser(name)
|
|
sp.add_argument("root", type=Path)
|
|
sp.add_argument("--db", type=Path, default=None)
|
|
args = p.parse_args()
|
|
db = args.db or (args.root / ".dedupe" / "dedupe.db")
|
|
if args.cmd == "watch":
|
|
watch(args.root, db)
|
|
return
|
|
if args.cmd in {"scan", "reconcile"}:
|
|
print(f"indexed={scan(args.root, db)} db={db}")
|
|
if args.cmd == "dedupe":
|
|
scan(args.root, db)
|
|
actions = exact_dedupe(db, args.root)
|
|
print(f"hardlinked={len(actions)}")
|