Files
coven/modules/ufbx/misc/execute_per_fbx.py

54 lines
1.6 KiB
Python

#!/usr/bin/env python3
import argparse
import os
import time
import subprocess
parser = argparse.ArgumentParser(usage="execute_per_fbx.py --exe loader --root .")
parser.add_argument("--exe", help="Executable to run")
parser.add_argument("--root", default=".", help="Root path to search from")
parser.add_argument("--start", default="", help="Top-level file to start from")
parser.add_argument("--verbose", action="store_true", help="Verbose information")
parser.add_argument('remainder', nargs="...")
argv = parser.parse_args()
begin = time.time()
num_tested = 0
num_fail = 0
total_size = 0
for root, dirs, files in os.walk(argv.root):
for file in files:
if not file.lower().endswith(".fbx"): continue
if file.lower().endswith(".ufbx-fail.fbx"):
num_fail += 1
continue
path = os.path.join(root, file)
size = os.stat(path).st_size
display = os.path.relpath(path, argv.root)
if argv.start and display < argv.start:
continue
print(f"-- {display}", flush=True)
total_size += size
if argv.exe:
args = [argv.exe, path.encode("utf-8")] + argv.remainder[1:]
if argv.verbose:
cmdline = subprocess.list2cmdline(args)
print(f"$ {cmdline}")
subprocess.check_call(args)
num_tested += 1
end = time.time()
dur = end - begin
print()
print("Success!")
print(f"Loaded {num_tested} files in {int(dur//60)}min {int(dur%60)}s.")
print(f"Processed {total_size/1e9:.2f}GB at {total_size/1e6/dur:.2f}MB/s.")
print(f"Ignored {num_fail} invalid files.")