修复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
相关产品推荐
相关产品推荐

