83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
|
|
import bpy
|
|||
|
|
import os
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
def relocate_libraries():
|
|||
|
|
"""
|
|||
|
|
Relocate linked library files from Synology Drive to NAS storage.
|
|||
|
|
Changes paths from C:\\Users\\Nathan\\SynologyDrive\\ to R:\\
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# Define the path mappings
|
|||
|
|
old_base = r"C:\Users\Nathan\SynologyDrive"
|
|||
|
|
new_base = r"R:"
|
|||
|
|
|
|||
|
|
# Track changes
|
|||
|
|
changed_files = []
|
|||
|
|
failed_files = []
|
|||
|
|
|
|||
|
|
print("=== Library Relocation Script ===")
|
|||
|
|
print(f"Mapping: {old_base} → {new_base}")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# Process all library files
|
|||
|
|
for lib in bpy.data.libraries:
|
|||
|
|
if lib.filepath:
|
|||
|
|
old_path = lib.filepath
|
|||
|
|
|
|||
|
|
# Check if this is a Synology Drive path
|
|||
|
|
if old_base in old_path:
|
|||
|
|
# Create new path
|
|||
|
|
new_path = old_path.replace(old_base, new_base)
|
|||
|
|
|
|||
|
|
# Verify the new file exists
|
|||
|
|
if os.path.exists(new_path):
|
|||
|
|
try:
|
|||
|
|
# Update the library path
|
|||
|
|
lib.filepath = new_path
|
|||
|
|
changed_files.append((old_path, new_path))
|
|||
|
|
print(f"✓ Relocated: {os.path.basename(old_path)}")
|
|||
|
|
print(f" {old_path}")
|
|||
|
|
print(f" → {new_path}")
|
|||
|
|
print()
|
|||
|
|
except Exception as e:
|
|||
|
|
failed_files.append((old_path, str(e)))
|
|||
|
|
print(f"✗ Failed to relocate: {os.path.basename(old_path)}")
|
|||
|
|
print(f" Error: {e}")
|
|||
|
|
print()
|
|||
|
|
else:
|
|||
|
|
failed_files.append((old_path, "Target file not found"))
|
|||
|
|
print(f"✗ Target not found: {new_path}")
|
|||
|
|
print()
|
|||
|
|
else:
|
|||
|
|
print(f"ℹ Skipped (not Synology Drive): {old_path}")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# Summary
|
|||
|
|
print("=== Summary ===")
|
|||
|
|
print(f"Successfully relocated: {len(changed_files)} files")
|
|||
|
|
print(f"Failed to relocate: {len(failed_files)} files")
|
|||
|
|
|
|||
|
|
if changed_files:
|
|||
|
|
print("\nRelocated files:")
|
|||
|
|
for old, new in changed_files:
|
|||
|
|
print(f" {os.path.basename(old)}")
|
|||
|
|
|
|||
|
|
if failed_files:
|
|||
|
|
print("\nFailed files:")
|
|||
|
|
for old, reason in failed_files:
|
|||
|
|
print(f" {os.path.basename(old)}: {reason}")
|
|||
|
|
|
|||
|
|
return len(changed_files), len(failed_files)
|
|||
|
|
|
|||
|
|
# Run the script
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
success_count, fail_count = relocate_libraries()
|
|||
|
|
|
|||
|
|
if success_count > 0:
|
|||
|
|
print(f"\n✅ Successfully relocated {success_count} library files!")
|
|||
|
|
print("You may need to save your .blend file to preserve these changes.")
|
|||
|
|
|
|||
|
|
if fail_count > 0:
|
|||
|
|
print(f"\n⚠️ {fail_count} files failed to relocate.")
|
|||
|
|
print("Check that the NAS paths exist and are accessible.")
|