54 lines
1.6 KiB
Python
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.")
|