以下是一个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)
使用说明
将脚本保存为
delete_small_files.py
通过命令行运行:
python delete_small_files.py [--dry-run]
参数说明:
<目录路径>
:要清理的目录路径<最小文件大小>
:文件大小阈值(支持单位)B
:字节(默认单位)K
:KB(1024字节)M
:MB(1024KB)G
:GB(1024MB)示例:
10M
、500K
、1000000
--dry-run
:预览模式(只显示将要删除的文件,不实际执行删除)
示例:
实际删除
/home/user/documents
中小于10MB的文件:
python delete_small_files.py /home/user/documents 10M
2.预览当前目录中小于500KB的文件(不实际删除):
python delete_small_files.py . 500K --dry-run
注意事项:
脚本会递归处理所有子目录
删除操作不可逆,建议先使用
--dry-run
参数预览需要具有目录的读写权限
会跳过无法访问的文件(显示错误信息)
不会删除目录本身,只删除文件
其他特性:
提供预览模式(dry-run)
显示详细操作日志
操作后显示统计信息
错误处理(权限问题/无效路径等)
大小单位自动转换
特别注意!!!:使用前建议在测试目录中验证效果,确认无误后再用于重要数据!