2025-08-20 11:39:34 +08:00
|
|
|
import os
|
|
|
|
|
import glob
|
|
|
|
|
import shutil
|
|
|
|
|
|
|
|
|
|
def cleanup(history_dir="history"):
|
2025-09-05 14:41:59 +08:00
|
|
|
# Get video file name - 重构后从output目录查找
|
|
|
|
|
video_files = [f for f in os.listdir('output') if f.endswith(('.mp4', '.avi', '.mov', '.mkv'))]
|
|
|
|
|
if video_files:
|
|
|
|
|
video_file = video_files[0]
|
|
|
|
|
video_name = os.path.splitext(video_file)[0]
|
|
|
|
|
video_name = sanitize_filename(video_name)
|
|
|
|
|
else:
|
|
|
|
|
video_name = "unknown_video" # 默认名称
|
2025-08-20 11:39:34 +08:00
|
|
|
|
|
|
|
|
# Create required folders
|
|
|
|
|
os.makedirs(history_dir, exist_ok=True)
|
|
|
|
|
video_history_dir = os.path.join(history_dir, video_name)
|
|
|
|
|
log_dir = os.path.join(video_history_dir, "log")
|
|
|
|
|
gpt_log_dir = os.path.join(video_history_dir, "gpt_log")
|
|
|
|
|
os.makedirs(log_dir, exist_ok=True)
|
|
|
|
|
os.makedirs(gpt_log_dir, exist_ok=True)
|
|
|
|
|
|
|
|
|
|
# Move non-log files
|
|
|
|
|
for file in glob.glob("output/*"):
|
|
|
|
|
if not file.endswith(('log', 'gpt_log')):
|
|
|
|
|
move_file(file, video_history_dir)
|
|
|
|
|
|
|
|
|
|
# Move log files
|
|
|
|
|
for file in glob.glob("output/log/*"):
|
|
|
|
|
move_file(file, log_dir)
|
|
|
|
|
|
|
|
|
|
# Move gpt_log files
|
|
|
|
|
for file in glob.glob("output/gpt_log/*"):
|
|
|
|
|
move_file(file, gpt_log_dir)
|
|
|
|
|
|
|
|
|
|
# Delete empty output directories
|
|
|
|
|
try:
|
|
|
|
|
os.rmdir("output/log")
|
|
|
|
|
os.rmdir("output/gpt_log")
|
|
|
|
|
os.rmdir("output")
|
|
|
|
|
except OSError:
|
|
|
|
|
pass # Ignore errors when deleting directories
|
|
|
|
|
|
|
|
|
|
def move_file(src, dst):
|
|
|
|
|
try:
|
|
|
|
|
# Get the source file name
|
|
|
|
|
src_filename = os.path.basename(src)
|
|
|
|
|
# Use os.path.join to ensure correct path and include file name
|
|
|
|
|
dst = os.path.join(dst, sanitize_filename(src_filename))
|
|
|
|
|
|
|
|
|
|
if os.path.exists(dst):
|
|
|
|
|
if os.path.isdir(dst):
|
|
|
|
|
# If destination is a folder, try to delete its contents
|
|
|
|
|
shutil.rmtree(dst, ignore_errors=True)
|
|
|
|
|
else:
|
|
|
|
|
# If destination is a file, try to delete it
|
|
|
|
|
os.remove(dst)
|
|
|
|
|
|
|
|
|
|
shutil.move(src, dst, copy_function=shutil.copy2)
|
|
|
|
|
print(f"✅ Moved: {src} -> {dst}")
|
|
|
|
|
except PermissionError:
|
|
|
|
|
print(f"⚠️ Permission error: Cannot delete {dst}, attempting to overwrite")
|
|
|
|
|
try:
|
|
|
|
|
shutil.copy2(src, dst)
|
|
|
|
|
os.remove(src)
|
|
|
|
|
print(f"✅ Copied and deleted source file: {src} -> {dst}")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"❌ Move failed: {src} -> {dst}")
|
|
|
|
|
print(f"Error message: {str(e)}")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"❌ Move failed: {src} -> {dst}")
|
|
|
|
|
print(f"Error message: {str(e)}")
|
|
|
|
|
|
|
|
|
|
def sanitize_filename(filename):
|
|
|
|
|
# Remove or replace disallowed characters
|
|
|
|
|
invalid_chars = '<>:"/\\|?*'
|
|
|
|
|
for char in invalid_chars:
|
|
|
|
|
filename = filename.replace(char, '_')
|
|
|
|
|
return filename
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
cleanup()
|