80 lines
3.5 KiB
Python
80 lines
3.5 KiB
Python
import os
|
|
import shutil
|
|
|
|
ROOT_DIR = os.getcwd()
|
|
|
|
def flatten_structure_deep():
|
|
print("Starting Deep Flattening...")
|
|
|
|
# Iterate over all directories in root
|
|
for item in os.listdir(ROOT_DIR):
|
|
theme_dir = os.path.join(ROOT_DIR, item)
|
|
|
|
# We only care about "documentacao *" folders
|
|
if os.path.isdir(theme_dir) and item.startswith("documentacao "):
|
|
print(f"Processing Theme: {item}")
|
|
|
|
# Walk top-down through the directory
|
|
# We use os.walk but we need to be careful not to process files we just moved.
|
|
# So we list dir first.
|
|
|
|
subdirs = [d for d in os.listdir(theme_dir) if os.path.isdir(os.path.join(theme_dir, d))]
|
|
|
|
for subdir in subdirs:
|
|
if subdir == "assets":
|
|
continue # Skip root assets
|
|
|
|
subdir_path = os.path.join(theme_dir, subdir)
|
|
print(f" Flattening subfolder: {subdir}")
|
|
|
|
# Recursively move everything from this folder to theme_dir
|
|
for root, dirs, files in os.walk(subdir_path, topdown=False):
|
|
for name in files:
|
|
src_file = os.path.join(root, name)
|
|
|
|
# Calculate relative path to preserve context in filename if needed
|
|
# But user wants ROOT.
|
|
# Collision strategy: If file exists, prepend folder name.
|
|
|
|
dest_file = os.path.join(theme_dir, name)
|
|
|
|
if os.path.exists(dest_file):
|
|
# Collision! Prepend subdir name to filename
|
|
# Ex: "manual.md" -> "Asterisk_manual.md"
|
|
print(f" Collision for {name}. Renaming...")
|
|
new_name = f"{subdir}_{name}"
|
|
dest_file = os.path.join(theme_dir, new_name)
|
|
|
|
shutil.move(src_file, dest_file)
|
|
print(f" Moved: {name} -> {os.path.basename(dest_file)}")
|
|
|
|
for name in dirs:
|
|
# Handle Assets folders
|
|
if name == "assets":
|
|
assets_src = os.path.join(root, name)
|
|
theme_assets = os.path.join(theme_dir, "assets")
|
|
|
|
if not os.path.exists(theme_assets):
|
|
os.makedirs(theme_assets)
|
|
|
|
for asset_file in os.listdir(assets_src):
|
|
a_src = os.path.join(assets_src, asset_file)
|
|
a_dst = os.path.join(theme_assets, asset_file)
|
|
if not os.path.exists(a_dst):
|
|
shutil.move(a_src, a_dst)
|
|
|
|
try:
|
|
os.rmdir(assets_src)
|
|
except:
|
|
pass
|
|
|
|
# Remove the original subfolder if empty
|
|
try:
|
|
shutil.rmtree(subdir_path)
|
|
print(f" Removed folder: {subdir}")
|
|
except Exception as e:
|
|
print(f" Warning: Could not remove {subdir}: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
flatten_structure_deep()
|