文章

Python脚本: Mac 移动目录下的视频到"集合"目录

import os
import shutil
import argparse
import sys

def main():
    parser = argparse.ArgumentParser(description='移动电影文件到目标文件夹')
    parser.add_argument('files', nargs='+', help='电影文件路径列表或目录')
    args = parser.parse_args()
    
    if not args.files:
        print("请提供至少一个电影文件路径或目录")
        sys.exit(1)
        
    # 智能识别目标文件夹名称
    import datetime
    
    # 获取所有输入路径的共同前缀
    common_prefix = os.path.commonprefix(args.files)
    if common_prefix:
        # 提取前缀的最后一部分作为文件夹名
        prefix_name = os.path.basename(common_prefix.rstrip(os.sep))
        if prefix_name:
            target_folder = f"{prefix_name}_集合"
        else:
            # 如果没有有效前缀,使用当前日期
            target_folder = datetime.datetime.now().strftime("%Y%m%d") + "_集合"
    else:
        # 如果没有共同前缀,使用当前日期
        target_folder = datetime.datetime.now().strftime("%Y%m%d") + "_集合"
    
    # 创建目标文件夹
    os.makedirs(target_folder, exist_ok=True)
    movie_extensions = ['.mp4', '.mkv', '.avi', '.mov', '.flv', '.wmv', '.rmvb', '.rm', '.mpg', '.mpeg', '.vob', '.dat', '.ts', '.m2ts', '.tp', '.trp', '.mts', '.m2t']
    
    # 收集所有要移动的文件
    files_to_move = []
    for path in args.files:
        if os.path.isdir(path):
            # 如果是目录,递归收集所有电影文件
            for root, dirs, files in os.walk(path):
                for file in files:
                    file_extension = os.path.splitext(file)[1].lower()
                    if file_extension in movie_extensions:
                        files_to_move.append(os.path.join(root, file))
        else:
            # 如果是文件,直接检查扩展名
            file_extension = os.path.splitext(path)[1].lower()
            if file_extension in movie_extensions:
                files_to_move.append(path)
    
    # 移动文件
    for file_path in files_to_move:
        target_path = os.path.join(target_folder, os.path.basename(file_path))
        if os.path.exists(target_path):
            print(f"跳过已存在的文件:{target_path}")
            continue
        shutil.move(file_path, target_path)
        print(f"移动文件:{file_path} -> {target_path}")
    
    print(f"电影文件移动完成!共移动{len(files_to_move)}个文件,目标文件夹:{os.path.abspath(target_folder)}")
    return os.path.abspath(target_folder)

if __name__ == "__main__":
    main()