以下是一个Python脚本,用于删除指定目录中小于指定大小的文件(支持递归子目录):

import os
import sys

def convert_size(size_str):
    """将人类可读的文件大小转换为字节数"""
    units = {"B": 1, "K": 2**10, "M": 2**20, "G": 2**30}
    num = size_str[:-1].strip()
    unit = size_str[-1].upper()
    
    if not num.isdigit():
        raise ValueError("Invalid size format")
    
    return int(num) * units.get(unit, 1)

def delete_small_files(directory, min_size_bytes, dry_run=False):
    """删除小于指定大小的文件"""
    deleted_count = 0
    total_size_saved = 0
    
    for root, dirs, files in os.walk(directory):
        for file in files:
            file_path = os.path.join(root, file)
            
            try:
                file_size = os.path.getsize(file_path)
                if file_size < min_size_bytes:
                    if dry_run:
                        print(f"[DRY RUN] 将删除: {file_path} ({file_size} bytes)")
                    else:
                        os.remove(file_path)
                        print(f"已删除: {file_path} ({file_size} bytes)")
                    deleted_count += 1
                    total_size_saved += file_size
            except Exception as e:
                print(f"处理 {file_path} 时出错: {str(e)}", file=sys.stderr)
    
    print(f"\n操作完成: 共删除 {deleted_count} 个文件")
    print(f"释放空间: {total_size_saved} 字节 ({total_size_saved / (1024*1024):.2f} MB)")

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("用法: python delete_small_files.py   [--dry-run]")
        print("示例: python delete_small_files.py /home/user/documents 10M")
        print("示例: python delete_small_files.py . 500K --dry-run")
        print("\n大小单位: B(字节), K(KB), M(MB), G(GB)")
        sys.exit(1)
    
    directory = sys.argv[1]
    size_str = sys.argv[2]
    dry_run = "--dry-run" in sys.argv
    
    try:
        min_size_bytes = convert_size(size_str)
    except ValueError:
        print("错误: 无效的文件大小格式。请使用类似 '10M', '500K', '1000000' 的格式")
        sys.exit(1)
    
    if not os.path.isdir(directory):
        print(f"错误: 目录不存在: {directory}")
        sys.exit(1)
    
    print(f"目标目录: {directory}")
    print(f"最小保留大小: {min_size_bytes} 字节 ({size_str})")
    print(f"运行模式: {'预览模式 (不实际删除)' if dry_run else '实际删除模式'}")
    print("-" * 60)
    
    delete_small_files(directory, min_size_bytes, dry_run)

使用说明

  1. 将脚本保存为 delete_small_files.py

  2. 通过命令行运行:

python delete_small_files.py   [--dry-run]

参数说明:

  • <目录路径>:要清理的目录路径

  • <最小文件大小>:文件大小阈值(支持单位)

    • B:字节(默认单位)

    • K:KB(1024字节)

    • M:MB(1024KB)

    • G:GB(1024MB)

    • 示例:10M500K1000000

  • --dry-run:预览模式(只显示将要删除的文件,不实际执行删除)

示例:

  1. 实际删除 /home/user/documents 中小于10MB的文件:

python delete_small_files.py /home/user/documents 10M

   2.预览当前目录中小于500KB的文件(不实际删除):

python delete_small_files.py . 500K --dry-run

注意事项:

  1. 脚本会递归处理所有子目录

  2. 删除操作不可逆,建议先使用 --dry-run 参数预览

  3. 需要具有目录的读写权限

  4. 会跳过无法访问的文件(显示错误信息)

  5. 不会删除目录本身,只删除文件

其他特性:

  1. 提供预览模式(dry-run)

  2. 显示详细操作日志

  3. 操作后显示统计信息

  4. 错误处理(权限问题/无效路径等)

  5. 大小单位自动转换

特别注意!!!:使用前建议在测试目录中验证效果,确认无误后再用于重要数据!