以下是一个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)
显示详细操作日志
操作后显示统计信息
错误处理(权限问题/无效路径等)
大小单位自动转换
特别注意!!!:使用前建议在测试目录中验证效果,确认无误后再用于重要数据!