如何使用eyed3或ffmpeg查找文件夹内带有ID3v2.2标签的音频文件
实现方案
下面提供两种可直接运行的批量处理方案,均支持处理嵌套文件夹内的音频文件,适配4万量级文件的处理效率。
方案1:使用eyeD3实现(检测更精准,推荐)
前置准备
先安装eyeD3依赖:pip install eyed3
可直接运行脚本
Linux/macOS 环境可直接执行以下脚本,Windows 可在 WSL 或 Git Bash 中运行,替换路径即可:
# 替换为你的音频源文件夹路径 SOURCE_DIR="/path/to/your/audio/folder" # 替换为你要移动到的目标文件夹路径 TARGET_DIR="/path/to/target/folder" # 自动创建不存在的目标文件夹 mkdir -p "$TARGET_DIR" # 遍历所有mp3文件,筛选ID3v2.2标签的文件移动 find "$SOURCE_DIR" -type f -iname "*.mp3" | while read -r file; do # 提取标签版本信息,过滤无关报错 tag_version=$(eyed3 "$file" 2>/dev/null | grep -oP 'ID3 v2\.2') if [ -n "$tag_version" ]; then echo "正在移动匹配文件: $file" mv "$file" "$TARGET_DIR/" fi done
如果需要保留源文件的目录结构,把mv命令替换为rsync --relative "$file" "$TARGET_DIR/" && rm "$file"即可。
方案2:使用ffmpeg实现
如果不想安装Python依赖,可使用ffmpeg套件中的ffprobe做标签检测:
SOURCE_DIR="/path/to/your/audio/folder" TARGET_DIR="/path/to/target/folder" mkdir -p "$TARGET_DIR" find "$SOURCE_DIR" -type f -iname "*.mp3" | while read -r file; do id3_ver=$(ffprobe "$file" 2>&1 | grep -oP 'ID3v2\.2') if [ -n "$id3_ver" ]; then mv "$file" "$TARGET_DIR/" fi done
效率说明
4万文件的总处理耗时在10-30分钟区间,取决于磁盘读写速度,运行期间可通过打印的日志实时查看进度。
如果需要跳过已经处理过的重复文件,可在循环内第一行添加判断逻辑:[ -f "$TARGET_DIR/$(basename "$file")" ] && continue
内容的提问来源于stack exchange,提问作者JonHerbert
相关产品推荐
相关产品推荐

