如何清理视频文件夹:针对前缀相同的多分辨率视频文件保留最大文件并删除其余文件
解决方案:保留同前缀视频中体积最大的文件,删除其余
针对你要清理视频文件夹,保留同前缀(最后一个下划线前的名称)中体积最大文件的需求,我给你整理了几个不同平台的实用方案,都能快速搞定:
方案1:Windows PowerShell 实现
这个方法适合Windows用户,直接用系统自带的PowerShell就能操作,不用额外安装工具:
# 先切换到目标视频文件夹 cd "C:\你的视频文件夹路径" # 按前缀分组,每组保留体积最大的文件,删除其他 Get-ChildItem -Filter *.mp4 | # 这里可以改成你的视频格式,比如*.mkv、*.avi Group-Object -Property { $_.BaseName -split '_' | Select-Object -SkipLast 1 | Join-String -Separator '_' } | ForEach-Object { # 找到组里体积最大的文件 $largestFile = $_.Group | Sort-Object -Property Length -Descending | Select-Object -First 1 # 遍历组里的其他文件并删除(可以先加-WhatIf参数测试,确认无误后再去掉) $_.Group | Where-Object { $_ -ne $largestFile } | Remove-Item -WhatIf }
说明:
- 把
C:\你的视频文件夹路径替换成你实际的文件夹路径 *.mp4可以换成你需要处理的视频格式,比如同时处理多种格式可以用*.*(但要注意排除非视频文件)-WhatIf参数会模拟删除操作,不会真的删文件,先运行一次确认要删的文件是对的,再去掉这个参数执行真正的删除
方案2:Linux/macOS Bash 脚本实现
如果你用Linux或者macOS,用Bash脚本更方便:
#!/bin/bash # 切换到目标文件夹(替换成你的路径) cd /path/to/your/video/folder || exit # 遍历所有视频文件(这里用*.mp4,可按需修改) for file in *.mp4; do # 获取前缀(去掉最后一个下划线及后面的内容) prefix="${file%_*}" # 把同前缀的文件放到临时数组里 files=("$prefix"_*) # 如果同前缀文件数量大于1,才需要处理 if [ "${#files[@]}" -gt 1 ]; then # 找到体积最大的文件 largest=$(printf "%s\n" "${files[@]}" | xargs ls -lS | head -n1 | awk '{print $9}') # 删除同前缀的其他文件(可以先把rm换成echo测试) for f in "${files[@]}"; do if [ "$f" != "$largest" ]; then rm "$f" # 测试阶段用下面这行代替rm: # echo "要删除的文件:$f" fi done fi done
说明:
- 把
/path/to/your/video/folder换成实际的文件夹路径 *.mp4可修改为你需要的格式,比如*.{mp4,mkv,avi}处理多种格式- 测试阶段把
rm "$f"换成echo "要删除的文件:$f",确认无误后再改回rm
方案3:Python 跨平台脚本实现
如果你喜欢用Python,这个脚本跨Windows、Linux、macOS都能用,灵活性更高:
import os def keep_largest_video(folder_path): # 按前缀分组存储文件 file_groups = {} # 遍历文件夹里的所有文件 for filename in os.listdir(folder_path): file_path = os.path.join(folder_path, filename) # 只处理文件,跳过文件夹 if not os.path.isfile(file_path): continue # 获取前缀(最后一个下划线前的部分) if '_' in filename: prefix = filename.rsplit('_', 1)[0] else: # 如果文件名没有下划线,跳过或者单独处理(按需调整) continue # 把文件路径加入对应分组 if prefix not in file_groups: file_groups[prefix] = [] file_groups[prefix].append(file_path) # 处理每个分组 for prefix, files in file_groups.items(): if len(files) <= 1: continue # 只有一个文件,不需要处理 # 按文件体积排序,取最大的那个 files.sort(key=lambda x: os.path.getsize(x), reverse=True) largest_file = files[0] # 删除其他文件(测试阶段可以把os.remove改成print) for file in files[1:]: print(f"删除文件:{file}") # os.remove(file) # 测试无误后打开这行 if __name__ == "__main__": # 替换成你的视频文件夹路径 target_folder = "C:\你的视频文件夹路径" # Windows路径 # target_folder = "/path/to/your/video/folder" # Linux/macOS路径 keep_largest_video(target_folder)
说明:
- 替换
target_folder为实际的文件夹路径,注意Windows路径用双反斜杠或者加r前缀(比如r"C:\Videos") - 测试阶段先注释掉
os.remove(file),用print查看要删除的文件,确认后再取消注释
重要注意事项
- 先备份文件:不管用哪个方案,建议先把视频文件夹备份一份,避免误删重要文件
- 先测试再执行:所有方案都提供了测试方式(比如PowerShell的-WhatIf,Bash的echo,Python的print),一定要先测试确认要删除的文件是正确的
- 确认命名规则:确保你的视频文件名确实是最后一个下划线后面跟着分辨率(比如
video_480p.mp4),如果文件名有多个下划线但前缀是前面的部分,代码里的前缀提取逻辑已经考虑到了(取最后一个下划线前的所有内容)
内容的提问来源于stack exchange,提问作者AleXSR700
相关产品推荐
相关产品推荐

