You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复Windows转Linux的M3U播放列表转换Bash脚本问题

修复MediaMonkey M3U播放列表转Linux兼容格式的Bash脚本问题

你的脚本失效核心是变量名错误、循环逻辑冗余、sed未正确处理输入,下面是问题分析和修复方案:

原脚本的关键问题

  • 变量名不匹配:定义的路径变量是strOldPath和strBSlash,但sed命令里误用了$OldPath和$BSlash,变量名完全不符,导致替换操作根本没执行
  • 循环逻辑混乱:while read line已经在逐行读取文件内容,嵌套的for i in $loadfile会把文件名按空格拆分成元素循环,完全多余
  • sed未处理目标内容:sed默认读取标准输入,你的sed命令没有接收$line作为输入,也没有将处理结果导向新文件
  • 未保存处理结果:脚本只是echo原始的$line,完全没把替换后的内容写入newfile

修复后的脚本

直接用sed一次性处理整个文件,比逐行循环高效得多:

#!/bin/bash

loadfile="$HOME/Music/M3U/loadfile.m3u"
newfile="$HOME/Music/M3U/newfile.m3u"

# 先替换Z:\为/media/Media/,再替换所有反斜杠为正斜杠
sed -e 's|Z:\\|/media/Media/|g' -e 's|\\|/|g' "$loadfile" > "$newfile"

脚本说明

  • 用|作为sed的分隔符,避免路径里的/和默认分隔符冲突
  • 第一个-e处理路径前缀替换,Z:\\是因为反斜杠在shell和sed里都需要转义
  • 第二个-e处理所有剩余的反斜杠替换
  • 直接将处理结果重定向到新文件newfile,无需冗余的逐行循环

验证效果

处理你的示例M3U文件后,输出内容会变成:

#EXTM3U
/media/Media/My Music/Peter Gabriel/1989 - Passion (lossless)/08 - Zaar.flac
/media/Media/My Music/Peter Gabriel/1990 - Shaking The Tree (lossless)/15 - Zaar.flac
/media/Media/My Music/Mozart/Amadeus Soundtrack/Disc 2/13 - Zaide Aria - Ruhe Sanft.mp3
/media/Media/My Music/Billy Joel/1978 - 52nd Street (lossless)/04 - Zanzibar.flac

内容的提问来源于stack exchange,提问作者user1457613

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:31:04